Merge branch 'master' into benutzerberechtigungGUIneu

This commit is contained in:
Manfred
2023-05-11 18:26:24 +02:00
67 changed files with 2913 additions and 979 deletions
+5 -4
View File
@@ -6,10 +6,6 @@ if (! defined('BASEPATH')) exit('No direct script access allowed');
// Deadline for Application given as Time-Interval after Semesterstart. // Deadline for Application given as Time-Interval after Semesterstart.
$config['interval_blocking_application'] = 'P1M'; $config['interval_blocking_application'] = 'P1M';
// Application submission period given by start- and enddate.
$config['submit_application_start'] = '05.09.2022';
$config['submit_application_end'] = '22.09.2022';
// Lehrveranstaltungen with these grades will be blocked for application // Lehrveranstaltungen with these grades will be blocked for application
$config['grades_blocking_application'] = array( $config['grades_blocking_application'] = array(
5, // nicht genügend 5, // nicht genügend
@@ -20,3 +16,8 @@ $config['grades_blocking_application'] = array(
15, // nicht teilgenommen 15, // nicht teilgenommen
18 // unentschuldigt 18 // unentschuldigt
); );
//Enables Fachbereichsleiter instead of LV Leiter
$config['fbl'] = FALSE;
//Enables Info Mails
$config['send_mail'] = TRUE;
+17 -1
View File
@@ -164,7 +164,14 @@ $config['navigation_header'] = array(
'expand' => true, 'expand' => true,
'sort' => 20, 'sort' => 20,
'requiredPermissions' => 'system/developer:r' 'requiredPermissions' => 'system/developer:r'
) ),
'anrechnungen' => array(
'link' => site_url('lehre/anrechnung/AdminAnrechnung'),
'description' => 'Anrechnungen',
'expand' => true,
'sort' => 30,
'requiredPermissions' => 'lehre/anrechnungszeitfenster:rw'
)
) )
) )
) )
@@ -184,6 +191,15 @@ $config['navigation_menu']['Vilesci/index'] = array(
) )
); );
$config['navigation_menu']['Vilesci/index'] = array(
'dashboard' => array(
'link' => '#',
'description' => 'Dashboard',
'icon' => 'dashboard',
'sort' => 1
)
);
$config['navigation_menu']['organisation/Reihungstest/index'] = array( $config['navigation_menu']['organisation/Reihungstest/index'] = array(
'reihungstestverwalung' => array( 'reihungstestverwalung' => array(
'link' => base_url('vilesci/stammdaten/reihungstestverwaltung.php'), 'link' => base_url('vilesci/stammdaten/reihungstestverwaltung.php'),
@@ -0,0 +1,187 @@
<?php
if (! defined('BASEPATH')) exit('No direct script access allowed');
class AdminAnrechnung extends Auth_Controller
{
public function __construct()
{
// Set required permissions
parent::__construct(
array(
'index' => 'lehre/anrechnungszeitfenster:rw',
'save' => 'lehre/anrechnungszeitfenster:rw',
'edit' => 'lehre/anrechnungszeitfenster:rw',
'delete' => 'lehre/anrechnungszeitfenster:rw'
)
);
// Load models
$this->load->model('education/Anrechnung_model', 'AnrechnungModel');
$this->load->model('education/Anrechnungszeitraum_model', 'AnrechnungszeitraumModel');
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
// Load libraries
$this->load->library('WidgetLib');
$this->load->library('PermissionLib');
$this->load->library('AnrechnungLib');
// Load language phrases
$this->loadPhrases(
array(
'global',
'ui',
'lehre',
'anrechnung',
'table'
)
);
$this->_setAuthUID();
$this->setControllerId();
}
public function index()
{
// Set nearest Studiensemester as default
$result = $this->StudiensemesterModel->getNearest();
$studiensemester_kurzbz = hasData($result) ? getData($result)[0]->studiensemester_kurzbz : '';
// Get existing Anrechnungszeitraeume
$this->AnrechnungszeitraumModel->addOrder('anrechnungszeitraum_id', 'DESC');
$result = $this->AnrechnungszeitraumModel->load();
$anrechnungszeitraum_arr = hasData($result) ? getData($result) : array();
$viewData = array(
'studiensemester_kurzbz' => $studiensemester_kurzbz,
'anrechnungszeitraum_arr' => $anrechnungszeitraum_arr
);
$this->load->view('lehre/anrechnung/adminAnrechnung.php', $viewData);
}
/**
* Save new Anrechnungszeitraum.
*/
public function save()
{
$this->_validate($this->input->post());
$studiensemester_kurzbz = $this->input->post('studiensemester_kurzbz');
$anrechnungstart = $this->input->post('anrechnungstart');
$anrechnungende = $this->input->post('anrechnungende');
$result = $this->AnrechnungszeitraumModel->insertAzr($studiensemester_kurzbz, $anrechnungstart, $anrechnungende);
if (isError($result))
{
$this->terminateWithJsonError(getError($result));
}
if (hasData($result))
{
$this->outputJsonSuccess(array('anrechnungszeitraum_id' => getData($result)));
}
}
/**
* Edit Anrechnungszeitraum.
*/
public function edit()
{
$this->_validate($this->input->post());
$anrechnungszeitraum_id = $this->input->post('anrechnungszeitraum_id');
$studiensemester_kurzbz = $this->input->post('studiensemester_kurzbz');
$anrechnungstart = $this->input->post('anrechnungstart');
$anrechnungende = $this->input->post('anrechnungende');
$result = $this->AnrechnungszeitraumModel->updateAzr(
$anrechnungszeitraum_id,
$studiensemester_kurzbz,
$anrechnungstart,
$anrechnungende
);
if (isError($result))
{
$this->terminateWithJsonError(getError($result));
}
if (hasData($result))
{
$this->outputJsonSuccess(array('anrechnungszeitraum_id' => getData($result)));
}
}
/**
* Delete Anrechnungszeitraum.
*/
public function delete()
{
$anrechnungszeitraum_id = $this->input->post('anrechnungszeitraum_id');
$result = $this->AnrechnungszeitraumModel->deleteAzr($anrechnungszeitraum_id);
if (isError($result))
{
$this->terminateWithJsonError(getError($result));
}
if (hasData($result))
{
$this->outputJsonSuccess(array('anrechnungszeitraum_id' => getData($result)));
}
}
/**
* Validates post parameters.
*
* @param $post
*/
private function _validate($post)
{
$studiensemester_kurzbz = $post['studiensemester_kurzbz'];
$anrechnungstart = $post['anrechnungstart'];
$anrechnungende = $post['anrechnungende'];
if (isEmptyString($studiensemester_kurzbz)
|| isEmptyString($anrechnungstart)
|| isEmptyString($anrechnungende))
{
$this->terminateWithJsonError($this->p->t('ui', 'errorFelderFehlen'));
}
if ($anrechnungstart > $anrechnungende)
{
$this->terminateWithJsonError($this->p->t('ui', 'errorStartdatumNachEndedatum'));
}
$result = $this->StudiensemesterModel->load($studiensemester_kurzbz);
$studiensemester = getData($result)[0];
if ($anrechnungstart < $studiensemester->start || $anrechnungstart > $studiensemester->ende)
{
$this->terminateWithJsonError($this->p->t('ui', 'errorStartdatumNichtInStudiensemester'));
}
if ($anrechnungende < $studiensemester->start || $anrechnungende > $studiensemester->ende)
{
$this->terminateWithJsonError($this->p->t('ui', 'errorEndedatumNichtInStudiensemester'));
}
}
/**
* Retrieve the UID of the logged user and checks if it is valid
*/
private function _setAuthUID()
{
$this->_uid = getAuthUID();
if (!$this->_uid) show_error('User authentification failed');
}
}
@@ -33,6 +33,9 @@ class approveAnrechnungDetail extends Auth_Controller
) )
); );
//Load configs
$this->load->config('anrechnung');
// Load models // Load models
$this->load->model('education/Anrechnung_model', 'AnrechnungModel'); $this->load->model('education/Anrechnung_model', 'AnrechnungModel');
$this->load->model('education/Anrechnungstatus_model', 'AnrechnungstatusModel'); $this->load->model('education/Anrechnungstatus_model', 'AnrechnungstatusModel');
@@ -90,7 +93,8 @@ class approveAnrechnungDetail extends Auth_Controller
$antragData = $this->anrechnunglib->getAntragData( $antragData = $this->anrechnunglib->getAntragData(
$anrechnungData->prestudent_id, $anrechnungData->prestudent_id,
$anrechnungData->studiensemester_kurzbz, $anrechnungData->studiensemester_kurzbz,
$anrechnungData->lehrveranstaltung_id $anrechnungData->lehrveranstaltung_id,
$anrechnungData->anrechnung_id
); );
// Get Empfehlung data // Get Empfehlung data
@@ -209,48 +213,46 @@ class approveAnrechnungDetail extends Auth_Controller
*/ */
public function requestRecommendation() public function requestRecommendation()
{ {
$data = $this->input->post('data'); $anrechnung_id = $this->input->post('anrechnung_id');
if(isEmptyArray($data)) if(isEmptyString($anrechnung_id))
{ {
return $this->outputJsonError('Fehler beim Übertragen der Daten.'); return $this->outputJsonError('Fehler beim Übertragen der Daten.');
} }
$retval = array(); $retval = array();
$counter = 0;
foreach ($data as $item) // Check if Anrechnungs-LV has lector
{ if (!$this->anrechnunglib->LVhasLector($anrechnung_id))
// Check if Anrechnungs-LV has lector {
if (!$this->anrechnunglib->LVhasLector($item['anrechnung_id'])) $this->terminateWithJsonError('LV has no lector');
{ }
// Count up LV with no lector
$counter++;
// Break, if LV has no lector // Get Fachbereichsleitung or LV Leitung.
break; if($this->config->item('fbl') === TRUE)
} {
$result = $this->anrechnunglib->getLeitungOfLvOe($anrechnung_id);
}
else
{
// If LV Leitung is not present, gets all LV lectors.
$result = $this->anrechnunglib->getLectors($anrechnung_id);
}
// Get full name of LV Leitung. $empfehlungsanfrage_an = !isEmptyArray($result) ? implode(', ', array_column($result, 'fullname')) : '';
// If LV Leitung is not present, get full name of LV lectors.
$lector_arr = $this->anrechnunglib->getLectors($item['anrechnung_id']);
$empfehlungsanfrage_an = !isEmptyArray($lector_arr)
? implode(', ', array_column($lector_arr, 'fullname'))
: '';
// Request Recommendation // Request Recommendation
if($this->anrechnunglib->requestRecommendation($item['anrechnung_id'])) if($this->anrechnunglib->requestRecommendation($anrechnung_id))
{ {
$retval[]= array( $retval[]= array(
'anrechnung_id' => $item['anrechnung_id'], 'anrechnung_id' => $anrechnung_id,
'status_kurzbz' => self::ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR, 'status_kurzbz' => self::ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR,
'status_bezeichnung' => $this->anrechnunglib->getStatusbezeichnung(self::ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR), 'status_bezeichnung' => $this->anrechnunglib->getStatusbezeichnung(self::ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR),
'empfehlung_anrechnung' => null, 'empfehlung_anrechnung' => null,
'empfehlungsanfrageAm' => (new DateTime())->format('d.m.Y'), 'empfehlungsanfrageAm' => (new DateTime())->format('d.m.Y'),
'empfehlungsanfrageAn' => $empfehlungsanfrage_an 'empfehlungsanfrageAn' => $empfehlungsanfrage_an
); );
} }
}
/** /**
* Send mails to lectors * Send mails to lectors
@@ -259,21 +261,24 @@ class approveAnrechnungDetail extends Auth_Controller
* */ * */
if (!isEmptyArray($retval)) if (!isEmptyArray($retval))
{ {
self::_sendSanchoMailToLectors($retval); if ($this->config->item('send_mail') === TRUE)
{
$this->_sendSanchoMailToLectors($anrechnung_id);
}
// Output json to ajax // Output json to ajax
return $this->outputJsonSuccess($retval); return $this->outputJsonSuccess($retval);
} }
// Output json to ajax // Output json to ajax
if (isEmptyArray($retval) && $counter > 0) if (isEmptyArray($retval))
{ {
return $this->outputJsonError( $this->terminateWithJsonError(
"Empfehlung wurde nicht angefordert,\nDer LV sind keine LektorInnen zugeteilt." "Empfehlung wurde nicht angefordert,\nDer LV sind keine LektorInnen zugeteilt."
); );
} }
return $this->outputJsonError($this->p->t('ui', 'errorNichtAusgefuehrt')); $this->terminateWithJsonError($this->p->t('ui', 'errorNichtAusgefuehrt'));
} }
/** /**
@@ -467,39 +472,33 @@ class approveAnrechnungDetail extends Auth_Controller
/** /**
* Send mail to lectors asking for recommendation. (first to LV-Leitung, if not present to all lectors of lv) * Send mail to lectors asking for recommendation. (first to LV-Leitung, if not present to all lectors of lv)
* @param $mail_params * @param $anrechnung_id
* @return bool * @return bool
*/ */
private function _sendSanchoMailToLectors($mail_params) private function _sendSanchoMailToLectors($anrechnung_id)
{ {
// Get Lehrveranstaltungen $lehrveranstaltung_id = $this->AnrechnungModel->load($anrechnung_id)->retval[0]->lehrveranstaltung_id;
$anrechnung_arr = array(); $studiensemester_kurzbz = $this->AnrechnungModel->load($anrechnung_id)->retval[0]->studiensemester_kurzbz;
foreach ($mail_params as $item)
{
$this->AnrechnungModel->addSelect('lehrveranstaltung_id, studiensemester_kurzbz');
$anrechnung_arr[]= array(
'lehrveranstaltung_id' => $this->AnrechnungModel->load($item['anrechnung_id'])->retval[0]->lehrveranstaltung_id,
'studiensemester_kurzbz' => $this->AnrechnungModel->load($item['anrechnung_id'])->retval[0]->studiensemester_kurzbz
);
}
$anrechnung_arr = array_unique($anrechnung_arr, SORT_REGULAR);
/** /**
* Get lectors (prio for LV-Leitung, if not present to all lectors of LV. * Get mail receivers.
* If config is default (lectors): prio for LV-Leitung, if not present to all lectors of LV.
* Anyway this function will receive a unique array to avoid sending more mails to one and the same lector. * Anyway this function will receive a unique array to avoid sending more mails to one and the same lector.
* **/ * **/
$lector_arr = $this->_getLectors($anrechnung_arr); if ($this->config->item('fbl') === TRUE)
{
$receiver_arr = $this->_getLeitungOfLvOe($lehrveranstaltung_id);
}
else
{
$receiver_arr = $this->_getLectors($studiensemester_kurzbz, $lehrveranstaltung_id);
}
// Send mail
foreach ($receiver_arr as $receiver)
// Send mail to lectors
foreach ($lector_arr as $lector)
{ {
$to = $lector->uid; $to = $receiver->uid. '@'. DOMAIN;;
$vorname = $lector->vorname; $vorname = $receiver->vorname;
// Get full name of stgl // Get full name of stgl
$this->load->model('person/Person_model', 'PersonModel'); $this->load->model('person/Person_model', 'PersonModel');
@@ -537,35 +536,30 @@ class approveAnrechnungDetail extends Auth_Controller
* @param $anrechnung_arr * @param $anrechnung_arr
* @return array * @return array
*/ */
private function _getLectors($anrechnung_arr) private function _getLectors($studiensemester_kurzbz, $lehrveranstaltung_id)
{ {
$lector_arr = array(); $lector_arr = array();
// Get lectors $result = $this->LehrveranstaltungModel->getLecturersByLv($studiensemester_kurzbz, $lehrveranstaltung_id);
foreach($anrechnung_arr as $anrechnung)
{
$this->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel');
$result = $this->LehrveranstaltungModel->getLecturersByLv($anrechnung['studiensemester_kurzbz'], $anrechnung['lehrveranstaltung_id']);
if (!$result = getData($result)) if (!$result = getData($result))
{ {
show_error('Failed retrieving lectors of Lehrveranstaltung'); show_error('Failed retrieving lectors of Lehrveranstaltung');
} }
// Check if lv has LV-Leitung // Check if lv has LV-Leitung
$key = array_search(true, array_column($result, 'lvleiter')); $key = array_search(true, array_column($result, 'lvleiter'));
// If lv has LV-Leitung, keep only the one // If lv has LV-Leitung, keep only the one
if ($key !== false) if ($key !== false)
{ {
$lector_arr[]= $result[$key]; $lector_arr[]= $result[$key];
} }
// ...otherwise keep all lectors // ...otherwise keep all lectors
else else
{ {
$lector_arr = array_merge($lector_arr, $result); $lector_arr = array_merge($lector_arr, $result);
} }
}
/** /**
* NOTE: This step is only done to make the array unique by uid, vorname and nachname in the following step * NOTE: This step is only done to make the array unique by uid, vorname and nachname in the following step
@@ -584,6 +578,14 @@ class approveAnrechnungDetail extends Auth_Controller
} }
// Get Leitungen of Lehrveranstaltungs-Organisationseinheit
private function _getLeitungOfLvOe($lehrveranstaltung_id)
{
$result = $this->LehrveranstaltungModel->getLeitungOfLvOe($lehrveranstaltung_id);
return hasData($result) ? getData($result) : show_error('Failed retrieving Leitung of Lehrveranstaltungs-Organisationseinheit');
}
private function _saveEmpfehlungsNotiz($anrechnung_id, $empfehlungstext, $notiz_id) private function _saveEmpfehlungsNotiz($anrechnung_id, $empfehlungstext, $notiz_id)
{ {
$this->load->model('person/Notiz_model', 'NotizModel'); $this->load->model('person/Notiz_model', 'NotizModel');
@@ -606,8 +608,5 @@ class approveAnrechnungDetail extends Auth_Controller
trim($empfehlungstext), trim($empfehlungstext),
$this->_uid $this->_uid
); );
} }
} }
@@ -28,6 +28,9 @@ class approveAnrechnungUebersicht extends Auth_Controller
) )
); );
// Load configs
$this->load->config('anrechnung');
// Load models // Load models
$this->load->model('education/Anrechnung_model', 'AnrechnungModel'); $this->load->model('education/Anrechnung_model', 'AnrechnungModel');
$this->load->model('education/Anrechnungstatus_model', 'AnrechnungstatusModel'); $this->load->model('education/Anrechnungstatus_model', 'AnrechnungstatusModel');
@@ -78,6 +81,19 @@ class approveAnrechnungUebersicht extends Auth_Controller
show_error(getError($studiengang_kz_arr)); show_error(getError($studiengang_kz_arr));
} }
// Get oes the user is entitled for
$oe_kurzbz_arr_schreibberechtigt = array();
if ($oe_arr = $this->permissionlib->getOE_isEntitledFor(self::BERECHTIGUNG_ANRECHNUNG_GENEHMIGEN))
{
foreach($oe_arr as $oe)
{
$berechtigt = $this->permissionlib->isBerechtigt(self::BERECHTIGUNG_ANRECHNUNG_GENEHMIGEN, 'suid', $oe);
if ($berechtigt) $oe_kurzbz_arr_schreibberechtigt[]= $oe;
}
}
// Check if permission is readonly
$hasReadOnlyAccess = $hasReadOnlyAccess =
$this->permissionlib->isBerechtigt(self::BERECHTIGUNG_ANRECHNUNG_GENEHMIGEN, 's') $this->permissionlib->isBerechtigt(self::BERECHTIGUNG_ANRECHNUNG_GENEHMIGEN, 's')
&& !$this->permissionlib->isBerechtigt(self::BERECHTIGUNG_ANRECHNUNG_GENEHMIGEN, 'suid'); && !$this->permissionlib->isBerechtigt(self::BERECHTIGUNG_ANRECHNUNG_GENEHMIGEN, 'suid');
@@ -87,9 +103,11 @@ class approveAnrechnungUebersicht extends Auth_Controller
$viewData = array( $viewData = array(
'studiensemester_selected' => $studiensemester_kurzbz, 'studiensemester_selected' => $studiensemester_kurzbz,
'studiengaenge_entitled' => $studiengang_kz_arr, 'studiengaenge_entitled' => $studiengang_kz_arr, // alle STG mit Lese- und Schreibberechtigung
'oes_schreibberechtigt' => $oe_kurzbz_arr_schreibberechtigt, // alle STG nur mit Schreibberechtigung
'hasReadOnlyAccess' => $hasReadOnlyAccess, 'hasReadOnlyAccess' => $hasReadOnlyAccess,
'hasCreateAnrechnungAccess' => $hasCreateAnrechnungAccess 'hasCreateAnrechnungAccess' => $hasCreateAnrechnungAccess,
'configFachbereichsleitung' => $this->config->item('fbl')
); );
$this->load->view('lehre/anrechnung/approveAnrechnungUebersicht.php', $viewData); $this->load->view('lehre/anrechnung/approveAnrechnungUebersicht.php', $viewData);
@@ -207,14 +225,20 @@ class approveAnrechnungUebersicht extends Auth_Controller
// Request Recommendation // Request Recommendation
if($this->anrechnunglib->requestRecommendation($item['anrechnung_id'])) if($this->anrechnunglib->requestRecommendation($item['anrechnung_id']))
{ {
// Get full name of LV Leitung. // Get full name of Fachbereichsleitung or LV Leitung.
// If LV Leitung is not present, get full name of LV lectors. if($this->config->item('fbl') === TRUE)
$lector_arr = $this->anrechnunglib->getLectors($item['anrechnung_id']); {
$empfehlungsanfrage_an = !isEmptyArray($lector_arr) $result = $this->anrechnunglib->getLeitungOfLvOe($item['anrechnung_id']);
? implode(', ', array_column($lector_arr, 'fullname')) }
: ''; else
{
// If LV Leitung is not present, get full name of LV lectors.
$result = $this->anrechnunglib->getLectors($item['anrechnung_id']);
}
$retval[]= array( $empfehlungsanfrage_an = !isEmptyArray($result) ? implode(', ', array_column($result, 'fullname')) : '';
$retval[]= array(
'anrechnung_id' => $item['anrechnung_id'], 'anrechnung_id' => $item['anrechnung_id'],
'status_kurzbz' => self::ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR, 'status_kurzbz' => self::ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR,
'status_bezeichnung' => $this->anrechnunglib->getStatusbezeichnung(self::ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR), 'status_bezeichnung' => $this->anrechnunglib->getStatusbezeichnung(self::ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR),
@@ -226,19 +250,27 @@ class approveAnrechnungUebersicht extends Auth_Controller
} }
/** /**
* Send mails to lectors * Send mails
* NOTE: mails are sent at the end to ensure sending only ONE mail to each LV-Leitung or lector * NOTE: mails are sent at the end to ensure sending only ONE mail to each LV-Leitung or lector
* even if they are required for more recommendations * even if they are required for more recommendations
* */ * */
if (!isEmptyArray($retval)) if (!isEmptyArray($retval))
{ {
self::_sendSanchoMailToLectors($retval); if ($this->config->item('send_mail') === TRUE)
{
$this->_sendSanchoMail($retval);
}
} }
// Output json to ajax // Output json to ajax
if (isEmptyArray($retval) && $counter == 0) if (isEmptyArray($retval))
{ {
return $this->outputJsonError('Es wurden keine Empfehlungen angefordert'); if ($counter > 0)
{
$this->terminateWithJsonError('Bei '. $counter.' LV sind keine LektorInnen zugeteilt.');
}
$this->terminateWithJsonError('Es wurden keine Empfehlungen angefordert');
} }
return $this->outputJsonSuccess($retval); return $this->outputJsonSuccess($retval);
@@ -316,7 +348,7 @@ class approveAnrechnungUebersicht extends Auth_Controller
* @param $mail_params * @param $mail_params
* @return bool * @return bool
*/ */
private function _sendSanchoMailToLectors($mail_params) private function _sendSanchoMail($mail_params)
{ {
// Get Lehrveranstaltungen // Get Lehrveranstaltungen
$anrechnung_arr = array(); $anrechnung_arr = array();
@@ -332,18 +364,25 @@ class approveAnrechnungUebersicht extends Auth_Controller
$anrechnung_arr = array_unique($anrechnung_arr, SORT_REGULAR); $anrechnung_arr = array_unique($anrechnung_arr, SORT_REGULAR);
/**
/** * Get mail receivers.
* Get lectors (prio for LV-Leitung, if not present to all lectors of LV. * If retrieving lectors: prio for LV-Leitung, if not present to all lectors of LV.
* Anyway this function will receive a unique array to avoid sending more mails to one and the same lector. * This function will receive a unique array to avoid sending more mails to one and the same user.
* **/ **/
$lector_arr = $this->_getLectors($anrechnung_arr); if($this->config->item('fbl') === TRUE)
{
$receiver_arr = $this->_getLeitungOfLvOe($anrechnung_arr);
}
else
{
$receiver_arr = $this->_getLectors($anrechnung_arr);
}
// Send mail to lectors // Send mail to lectors
foreach ($lector_arr as $lector) foreach ($receiver_arr as $receiver)
{ {
$to = $lector->uid; $to = $receiver->uid. '@'. DOMAIN;
$vorname = $lector->vorname; $vorname = $receiver->vorname;
// Get full name of stgl // Get full name of stgl
$this->load->model('person/Person_model', 'PersonModel'); $this->load->model('person/Person_model', 'PersonModel');
@@ -427,4 +466,34 @@ class approveAnrechnungUebersicht extends Auth_Controller
return $lector_arr; return $lector_arr;
} }
/**
* Get Leitungen of Lehrveranstaltungs-Organisationseinheit with unique uids.
*
* @param $anrechnung_arr
* @return array
*/
private function _getLeitungOfLvOe($anrechnung_arr)
{
$oeLeitung_arr = array();
// Get Leitungen
foreach($anrechnung_arr as $anrechnung)
{
$this->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel');
$result = $this->LehrveranstaltungModel->getLeitungOfLvOe($anrechnung['lehrveranstaltung_id']);
if (!hasData($result))
{
show_error('No Leitung found');
}
$oeLeitung_arr = array_merge($oeLeitung_arr, getData($result));
}
// Make array unique
$oeLeitung_arr = array_unique($oeLeitung_arr, SORT_REGULAR);
return $oeLeitung_arr;
}
} }
@@ -80,11 +80,7 @@ class requestAnrechnung extends Auth_Controller
$prestudent_id = getData($result)[0]->prestudent_id; $prestudent_id = getData($result)[0]->prestudent_id;
// Check if application deadline is expired // Check if application deadline is expired
$is_expired = self::_isExpired( $is_expired = $this->_isExpired($studiensemester_kurzbz);
$this->config->item('submit_application_start'),
$this->config->item('submit_application_end'),
$studiensemester_kurzbz
);
// Check if Lehrveranstaltung was already graded with application blocking grades // Check if Lehrveranstaltung was already graded with application blocking grades
$is_blocked = self::_LVhasBlockingGrades($studiensemester_kurzbz, $lehrveranstaltung_id); $is_blocked = self::_LVhasBlockingGrades($studiensemester_kurzbz, $lehrveranstaltung_id);
@@ -93,7 +89,7 @@ class requestAnrechnung extends Auth_Controller
$anrechnungData = $this->anrechnunglib->getAnrechnungDataByLv($lehrveranstaltung_id, $studiensemester_kurzbz, $prestudent_id); $anrechnungData = $this->anrechnunglib->getAnrechnungDataByLv($lehrveranstaltung_id, $studiensemester_kurzbz, $prestudent_id);
// Get Antrag data // Get Antrag data
$antragData = $this->anrechnunglib->getAntragData($prestudent_id, $studiensemester_kurzbz, $lehrveranstaltung_id); $antragData = $this->anrechnunglib->getAntragData($prestudent_id, $studiensemester_kurzbz, $lehrveranstaltung_id, $anrechnungData->anrechnung_id);
$viewData = array( $viewData = array(
'antragData' => $antragData, 'antragData' => $antragData,
@@ -234,32 +230,30 @@ class requestAnrechnung extends Auth_Controller
* @return bool True if deadline is expired * @return bool True if deadline is expired
* @throws Exception * @throws Exception
*/ */
private function _isExpired($start, $ende, $studiensemester_kurzbz) private function _isExpired($studiensemester_kurzbz)
{ {
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel'); $today = new DateTime('today midnight');
// If start is not given, set to Semesterstart. // Load all Anrechnungszeitfenster for this Studiensemester
if (!isset($start) || isEmptyString($start)) $this->load->model('education/Anrechnungszeitraum_model', 'AnrechnungszeitraumModel');
{ $result = $this->AnrechnungszeitraumModel->loadWhere(array('studiensemester_kurzbz' => $studiensemester_kurzbz));
$this->StudiensemesterModel->addSelect('start');
$result = $this->StudiensemesterModel->load($studiensemester_kurzbz);
$start = getData($result)[0]->start;
}
// If ende is not given, set to Semesterende. if (hasData($result))
if (!isset($ende) || isEmptyString($ende)) {
{ // Loop through Anrechnungszeitfenster
$this->StudiensemesterModel->addSelect('ende'); foreach (getData($result) as $azrObj)
$result = $this->StudiensemesterModel->load($studiensemester_kurzbz); {
$ende = getData($result)[0]->ende; $start = new DateTime($azrObj->anrechnungstart);
} $ende = new DateTime($azrObj->anrechnungende);
$today = new DateTime('today midnight'); // Return false if today is at least within one Anrechnungszeitraum
$start = new DateTime($start); if (($today >= $start && $today <= $ende)) return false;
$ende = new DateTime($ende);
// True if expired }
return ($today < $start || $today > $ende); }
// Return true if today is in none Anrechnungszeitraum
return true;
} }
/** /**
@@ -28,6 +28,9 @@ class reviewAnrechnungDetail extends Auth_Controller
) )
); );
// Load configs
$this->load->config('anrechnung');
// Load models // Load models
$this->load->model('education/Anrechnung_model', 'AnrechnungModel'); $this->load->model('education/Anrechnung_model', 'AnrechnungModel');
$this->load->model('education/Anrechnungstatus_model', 'AnrechnungstatusModel'); $this->load->model('education/Anrechnungstatus_model', 'AnrechnungstatusModel');
@@ -84,16 +87,21 @@ class reviewAnrechnungDetail extends Auth_Controller
$antragData = $this->anrechnunglib->getAntragData( $antragData = $this->anrechnunglib->getAntragData(
$anrechnungData->prestudent_id, $anrechnungData->prestudent_id,
$anrechnungData->studiensemester_kurzbz, $anrechnungData->studiensemester_kurzbz,
$anrechnungData->lehrveranstaltung_id $anrechnungData->lehrveranstaltung_id,
$anrechnungData->anrechnung_id
); );
// Get Empfehlung data // Get Empfehlung data
$empfehlungData = $this->anrechnunglib->getEmpfehlungData($anrechnung_id); $empfehlungData = $this->anrechnunglib->getEmpfehlungData($anrechnung_id);
// False if LV-Leitung is present and user is not LV-Leitung. Otherwise always true.
$isEmpfehlungsberechtigt = $this->anrechnunglib->isEmpfehlungsberechtigt($anrechnung_id);
$viewData = array( $viewData = array(
'antragData' => $antragData, 'antragData' => $antragData,
'anrechnungData' => $anrechnungData, 'anrechnungData' => $anrechnungData,
'empfehlungData' => $empfehlungData 'empfehlungData' => $empfehlungData,
'isEmpfehlungsberechtigt' => $isEmpfehlungsberechtigt
); );
$this->load->view('lehre/anrechnung/reviewAnrechnungDetail.php', $viewData); $this->load->view('lehre/anrechnung/reviewAnrechnungDetail.php', $viewData);
@@ -140,10 +148,13 @@ class reviewAnrechnungDetail extends Auth_Controller
* Send mails to STGL (if not present STGL, send to STGL assistance) * Send mails to STGL (if not present STGL, send to STGL assistance)
* NOTE: mails are sent at the end to ensure sending only one mail to each STGL * NOTE: mails are sent at the end to ensure sending only one mail to each STGL
* */ * */
if (!$this->_sendSanchoMails($json, true)) if ($this->config->item('send_mail') === TRUE)
{ {
return $this->outputJsonError('Failed sending emails'); if (!$this->_sendSanchoMails($json, true))
} {
return $this->outputJsonError('Failed sending emails');
}
}
return $this->outputJsonSuccess($json); return $this->outputJsonSuccess($json);
} }
@@ -191,10 +202,13 @@ class reviewAnrechnungDetail extends Auth_Controller
if (isset($json) && !isEmptyArray($json)) if (isset($json) && !isEmptyArray($json))
{ {
// Send mails to STGL (if not present STGL, send to STGL assistance) // Send mails to STGL (if not present STGL, send to STGL assistance)
if (!$this->_sendSanchoMails($json, false)) if ($this->config->item('send_mail') === TRUE)
{ {
return $this->outputJsonError('Failed sending emails'); if (!$this->_sendSanchoMails($json, false))
} {
return $this->outputJsonError('Failed sending emails');
}
}
return $this->outputJsonSuccess($json); return $this->outputJsonSuccess($json);
} }
@@ -253,8 +267,14 @@ class reviewAnrechnungDetail extends Auth_Controller
show_error('Failed retrieving Anrechnung'); show_error('Failed retrieving Anrechnung');
} }
$result = $this->LehrveranstaltungModel if($this->config->item('fbl') === TRUE)
->getLecturersByLv($result->studiensemester_kurzbz, $result->lehrveranstaltung_id); {
$result = $this->LehrveranstaltungModel->getLeitungOfLvOe($result->lehrveranstaltung_id);
}
else
{
$result = $this->LehrveranstaltungModel->getLecturersByLv($result->studiensemester_kurzbz, $result->lehrveranstaltung_id);
}
if($result = getData($result)) if($result = getData($result))
{ {
@@ -282,14 +302,20 @@ class reviewAnrechnungDetail extends Auth_Controller
show_error('Failed retrieving Anrechnung'); show_error('Failed retrieving Anrechnung');
} }
$result = $this->LehrveranstaltungModel if($this->config->item('fbl') === TRUE)
->getLecturersByLv($result->studiensemester_kurzbz, $result->lehrveranstaltung_id); {
$result = $this->LehrveranstaltungModel->getLeitungOfLvOe($result->lehrveranstaltung_id);
}
else
{
$result = $this->LehrveranstaltungModel->getLecturersByLv($result->studiensemester_kurzbz, $result->lehrveranstaltung_id);
}
if($result = getData($result)) if($result = getData($result))
{ {
$entitled_lector_arr = array_column($result, 'uid'); $entitled_uid_arr = array_column($result, 'uid');
if (in_array($this->_uid, $entitled_lector_arr)) if (in_array($this->_uid, $entitled_uid_arr))
{ {
return; return;
} }
@@ -26,6 +26,9 @@ class reviewAnrechnungUebersicht extends Auth_Controller
) )
); );
// Load configs
$this->load->config('anrechnung');
// Load models // Load models
$this->load->model('education/Anrechnung_model', 'AnrechnungModel'); $this->load->model('education/Anrechnung_model', 'AnrechnungModel');
$this->load->model('education/Anrechnungstatus_model', 'AnrechnungstatusModel'); $this->load->model('education/Anrechnungstatus_model', 'AnrechnungstatusModel');
@@ -72,7 +75,8 @@ class reviewAnrechnungUebersicht extends Auth_Controller
} }
$viewData = array( $viewData = array(
'studiensemester_selected' => $studiensemester_kurzbz 'studiensemester_selected' => $studiensemester_kurzbz,
'configFachbereichsleitung' => $this->config->item('fbl')
); );
$this->load->view('lehre/anrechnung/reviewAnrechnungUebersicht.php', $viewData); $this->load->view('lehre/anrechnung/reviewAnrechnungUebersicht.php', $viewData);
@@ -111,16 +115,19 @@ class reviewAnrechnungUebersicht extends Auth_Controller
* Send mails to STGL (if not present STGL, send to STGL assistance) * Send mails to STGL (if not present STGL, send to STGL assistance)
* NOTE: mails are sent at the end to ensure sending only one mail to each STGL * NOTE: mails are sent at the end to ensure sending only one mail to each STGL
* */ * */
if (!$this->_sendSanchoMails($json, true)) if ($this->config->item('send_mail') === TRUE)
{ {
show_error('Failed sending emails'); if (!$this->_sendSanchoMails($json, true))
} {
show_error('Failed sending emails');
}
}
return $this->outputJsonSuccess($json); return $this->outputJsonSuccess($json);
} }
else else
{ {
return $this->outputJsonError($this->p->t('ui', 'errorNichtAusgefuehrt')); $this->terminateWithJsonError($this->p->t('ui', 'errorNichtAusgefuehrt'));
} }
} }
@@ -154,10 +161,13 @@ class reviewAnrechnungUebersicht extends Auth_Controller
if (isset($json) && !isEmptyArray($json)) if (isset($json) && !isEmptyArray($json))
{ {
// Send mails to STGL (if not present STGL, send to STGL assistance) // Send mails to STGL (if not present STGL, send to STGL assistance)
if (!$this->_sendSanchoMails($json, false)) if ($this->config->item('send_mail') === TRUE)
{ {
show_error('Failed sending emails'); if (!$this->_sendSanchoMails($json, false))
} {
show_error('Failed sending emails');
}
}
return $this->outputJsonSuccess($json); return $this->outputJsonSuccess($json);
} }
@@ -217,14 +227,20 @@ class reviewAnrechnungUebersicht extends Auth_Controller
show_error('Failed retrieving Anrechnung'); show_error('Failed retrieving Anrechnung');
} }
$result = $this->LehrveranstaltungModel if ($this->config->item('fbl') === TRUE)
->getLecturersByLv($result->studiensemester_kurzbz, $result->lehrveranstaltung_id); {
$result = $this->LehrveranstaltungModel->getLeitungOfLvOe($result->lehrveranstaltung_id);
}
else
{
$result = $this->LehrveranstaltungModel->getLecturersByLv($result->studiensemester_kurzbz, $result->lehrveranstaltung_id);
}
if($result = getData($result)) if($result = getData($result))
{ {
$entitled_lector_arr = array_column($result, 'uid'); $entitled_uid_arr = array_column($result, 'uid');
if (in_array($this->_uid, $entitled_lector_arr)) if (in_array($this->_uid, $entitled_uid_arr))
{ {
return; return;
} }
@@ -142,12 +142,6 @@ class InfoCenter extends Auth_Controller
'reloadNotizen' => array('infocenter:r', 'lehre/zgvpruefung:r'), 'reloadNotizen' => array('infocenter:r', 'lehre/zgvpruefung:r'),
'reloadLogs' => 'infocenter:r', 'reloadLogs' => 'infocenter:r',
'outputAkteContent' => array('infocenter:r', 'lehre/zgvpruefung:r'), 'outputAkteContent' => array('infocenter:r', 'lehre/zgvpruefung:r'),
'getPostponeDate' => array('infocenter:r', 'lehre/zgvpruefung:r'),
'park' => 'infocenter:rw',
'unpark' => 'infocenter:rw',
'setOnHold' => 'infocenter:rw',
'removeOnHold' => array('infocenter:rw', 'lehre/zgvpruefung:rw'),
'getStudienjahrEnd' => array('infocenter:r', 'lehre/zgvpruefung:r'),
'setNavigationMenuArrayJson' => 'infocenter:r', 'setNavigationMenuArrayJson' => 'infocenter:r',
'getAbsageData' => 'infocenter:r', 'getAbsageData' => 'infocenter:r',
'saveAbsageForAll' => 'infocenter:rw', 'saveAbsageForAll' => 'infocenter:rw',
@@ -164,6 +158,7 @@ class InfoCenter extends Auth_Controller
$this->load->model('crm/Statusgrund_model', 'StatusgrundModel'); $this->load->model('crm/Statusgrund_model', 'StatusgrundModel');
$this->load->model('crm/ZGVPruefung_model', 'ZGVPruefungModel'); $this->load->model('crm/ZGVPruefung_model', 'ZGVPruefungModel');
$this->load->model('crm/ZGVPruefungStatus_model', 'ZGVPruefungStatusModel'); $this->load->model('crm/ZGVPruefungStatus_model', 'ZGVPruefungStatusModel');
$this->load->model('crm/Rueckstellung_model', 'RueckstellungModel');
$this->load->model('person/Notiz_model', 'NotizModel'); $this->load->model('person/Notiz_model', 'NotizModel');
$this->load->model('person/Person_model', 'PersonModel'); $this->load->model('person/Person_model', 'PersonModel');
$this->load->model('system/Message_model', 'MessageModel'); $this->load->model('system/Message_model', 'MessageModel');
@@ -606,7 +601,7 @@ class InfoCenter extends Auth_Controller
} }
/** /**
* Sendet bei einer neuen ZGV Prüfung die Mail raus an den Studiengang * Sendet bei einer neuen ZGV Prüfung eine Mail an den Studiengang
*/ */
private function sendZgvMail($mail, $typ, $person){ private function sendZgvMail($mail, $typ, $person){
$data = array( $data = array(
@@ -697,7 +692,7 @@ class InfoCenter extends Auth_Controller
/** /**
* Fügt einen neuen ZGV Status hinzu oder updated einen bestehenden * Fügt einen neuen ZGV Status hinzu oder updated einen bestehenden
* Falls es erfolgreich war, sendet er die Mail raus * Falls es erfolgreich war, wird eine Mail rausgeschickt
*/ */
public function zgvRueckfragen() public function zgvRueckfragen()
{ {
@@ -751,7 +746,8 @@ class InfoCenter extends Auth_Controller
$this->sendZgvMail($mail, $typ, $person); $this->sendZgvMail($mail, $typ, $person);
elseif (isError($insert)) elseif (isError($insert))
$this->terminateWithJsonError('Fehler beim Speichern'); $this->terminateWithJsonError('Fehler beim Speichern');
}else }
else
{ {
$insert = $this->ZGVPruefungModel->insert( $insert = $this->ZGVPruefungModel->insert(
array( array(
@@ -781,7 +777,7 @@ class InfoCenter extends Auth_Controller
} }
$hold = false; $hold = false;
if ($this->personloglib->getOnHoldDate($person_id) !== null) if (hasData($this->RueckstellungModel->getByPersonId($person_id, 'onhold_zgv')))
$hold = true; $hold = true;
$this->outputJsonSuccess( $this->outputJsonSuccess(
@@ -1163,106 +1159,6 @@ class InfoCenter extends Auth_Controller
->_display(); ->_display();
} }
/**
* Gets the date until which a person is parked
* @param $person_id
*/
public function getPostponeDate($person_id)
{
$result = array(
'type' => null,
'date' => null
);
$parkedDate = $this->personloglib->getParkedDate($person_id);
if (isset($parkedDate))
{
$result['type'] = 'parked';
$result['date'] = $parkedDate;
}
else
{
$onholdDate = $this->personloglib->getOnHoldDate($person_id);
if (isset($onholdDate))
{
$result['type'] = 'onhold';
$result['date'] = $onholdDate;
}
}
$this->outputJsonSuccess($result);
}
/**
* Initializes parking of a person, i.e. a person is not expected to do any actions while parked
*/
public function park()
{
$person_id = $this->input->post('person_id');
$date = $this->input->post('parkdate');
$result = $this->personloglib->park($person_id, date_format(date_create($date), 'Y-m-d'), self::TAETIGKEIT, self::APP, null, $this->_uid);
$this->outputJson($result);
}
/**
* Removes parking of a person
*/
public function unPark()
{
$person_id = $this->input->post('person_id');
$result = $this->personloglib->unPark($person_id);
$this->outputJson($result);
}
/**
* Sets a person on hold ("zurückstellen")
*/
public function setOnHold()
{
$person_id = $this->input->post('person_id');
$date = $this->input->post('onholddate');
$result = $this->personloglib->setOnHold($person_id, date_format(date_create($date), 'Y-m-d'), self::TAETIGKEIT, self::APP, null, $this->_uid);
$this->outputJson($result);
}
/**
* Removed on hold status of a person
*/
public function removeOnHold()
{
$person_id = $this->input->post('person_id');
$result = $this->personloglib->removeOnHold($person_id);
$this->outputJson($result);
}
/**
* Gets the End date of the current Studienjahr
*/
public function getStudienjahrEnd()
{
$this->load->model('organisation/studienjahr_model', 'StudienjahrModel');
$result = $this->StudienjahrModel->getCurrStudienjahr();
$json = null;
if (hasData($result))
{
$json = $result->retval[0]->ende;
}
$this->outputJsonSuccess(array($json));
}
/** /**
* Wrapper for setNavigationMenu, returns JSON message * Wrapper for setNavigationMenu, returns JSON message
@@ -1484,7 +1380,6 @@ class InfoCenter extends Auth_Controller
if($nachreichungAm < $today) if($nachreichungAm < $today)
$this->terminateWithJsonError($this->p->t('infocenter', 'nachreichDatumNichtVergangenheit')); $this->terminateWithJsonError($this->p->t('infocenter', 'nachreichDatumNichtVergangenheit'));
$akte = $this->AkteModel->loadWhere(array('person_id' => $person_id, 'dokument_kurzbz' => $allowedTypes[$typ])); $akte = $this->AkteModel->loadWhere(array('person_id' => $person_id, 'dokument_kurzbz' => $allowedTypes[$typ]));
if (hasData($akte)) { if (hasData($akte)) {
@@ -0,0 +1,135 @@
<?php
if (! defined('BASEPATH')) exit('No direct script access allowed');
class Rueckstellung extends Auth_Controller
{
private $_ci; // Code igniter instance
private $_uid;
public function __construct()
{
parent::__construct(
array(
'get' => array('infocenter:r', 'lehre/zgvpruefung:r'),
'set' => array('infocenter:r', 'lehre/zgvpruefung:r'),
'delete' => array('infocenter:r', 'lehre/zgvpruefung:r'),
'getStatus' => array('infocenter:rw', 'lehre/zgvpruefung:rw')
)
);
$this->load->model('crm/Rueckstellung_model', 'RueckstellungModel');
$this->load->model('crm/RueckstellungStatus_model', 'RueckstellungStatusModel');
$this->load->model('person/Person_model', 'PersonModel');
$this->load->library('PersonLogLib');
$this->_setAuthUID(); // sets property uid
$this->_ci =& get_instance(); // get code igniter instance
}
public function get($person_id)
{
$result = null;
$rueckstellung = $this->_ci->RueckstellungModel->getByPersonId($person_id);
if (isError($rueckstellung))
$this->terminateWithJsonError($this->_ci->p->t('ui', 'fehlerBeimLesen'));
if (hasData($rueckstellung))
{
$rueckstellung = getData($rueckstellung)[0];
$fullName = getData($this->_ci->PersonModel->getFullName($rueckstellung->insertvon));
$result = array(
'von' => $fullName,
'bezeichnung' => $rueckstellung->bezeichnung,
'bis' => $rueckstellung->datum_bis,
'status_kurzbz' => $rueckstellung->status_kurzbz
);
if ($rueckstellung->status_kurzbz === 'parked' && $rueckstellung->datum_bis < date('Y-m-d'))
{
$this->_ci->RueckstellungModel->delete(array('person_id' => $person_id, 'status_kurzbz' => 'parked'));
$result = null;
}
}
$this->outputJsonSuccess($result);
}
public function set()
{
$person_id = $this->input->post('person_id');
$datum_bis = $this->input->post('datum_bis');
$status_kurzbz = $this->input->post('status_kurzbz');
$result = $this->_ci->RueckstellungModel->insert(
array('person_id' => $person_id,
'status_kurzbz' => $status_kurzbz,
'datum_bis' => date_format(date_create($datum_bis), 'Y-m-d'),
'insertvon' => $this->_uid
)
);
if (isError($result))
$this->terminateWithJsonError(getError($result));
$this->_log($person_id, $status_kurzbz);
$this->outputJson($result);
}
public function delete()
{
$person_id = $this->input->post('person_id');
$status = $this->input->post('status');
$result = $this->_ci->RueckstellungModel->delete(array('person_id' => $person_id, 'status_kurzbz' => $status));
if (isError($result))
$this->terminateWithJsonError($this->_ci->p->t('ui', 'fehlerBeimSpeichern'));
$this->outputJson($result);
}
public function getStatus($aktiv = true)
{
$this->_ci->RueckstellungStatusModel->addOrder('sort');
$result = $this->_ci->RueckstellungStatusModel->loadWhere(array('aktiv' => $aktiv));
if (isError($result))
$this->terminateWithJsonError($this->_ci->p->t('ui', 'fehlerBeimLesen'));
$this->outputJsonSuccess(getData($result));
}
/**
* Retrieve the UID of the logged user and checks if it is valid
*/
private function _setAuthUID()
{
$this->_uid = getAuthUID();
if (!$this->_uid) show_error('User authentification failed');
}
private function _log($person_id, $status_kurzbz)
{
$message = "Person $person_id set to $status_kurzbz";
$this->_ci->personloglib->log(
$person_id,
'Action',
array(
'name' => 'Person status set',
'message' => $message,
'success' => true
),
'bewerbung',
'infocenter',
null,
$this->_uid
);
}
}
+86 -12
View File
@@ -37,17 +37,28 @@ class AnrechnungLib
* @param $lv_id * @param $lv_id
* @return StdClass * @return StdClass
*/ */
public function getAntragData($prestudent_id, $studiensemester_kurzbz, $lv_id) public function getAntragData($prestudent_id, $studiensemester_kurzbz, $lv_id, $anrechnung_id = null)
{ {
$antrag_data = new StdClass(); $antrag_data = new StdClass();
// Get students UID. // Get students UID.
$uid = $this->ci->StudentModel->getUID($prestudent_id); $uid = $this->ci->StudentModel->getUID($prestudent_id);
// Get lehrveranstaltung data. Break, if course is not assigned to student. // If Anrechnung exists
if(!$lv = getData($this->ci->LehrveranstaltungModel->getLvByStudent($uid, $studiensemester_kurzbz, $lv_id))[0]) if (is_numeric($anrechnung_id))
{ {
show_error('You are not assigned to this course yet.'); // Just load LV by lv_id
$result = $this->ci->LehrveranstaltungModel->load($lv_id);
$lv = getData($result)[0];
}
// If Anrechnung not exists
else
{
// Load LV, but check if student is assigned to that LV. Break, if not.
if(!$lv = getData($this->ci->LehrveranstaltungModel->getLvByStudent($uid, $studiensemester_kurzbz, $lv_id))[0])
{
show_error('You are not assigned to this course yet.');
}
} }
// Get the students personal data // Get the students personal data
@@ -275,13 +286,20 @@ class AnrechnungLib
{ {
$empfehlung_data->empfehlungsanfrageAm = (new DateTime($result->retval[0]->insertamum))->format('d.m.Y'); $empfehlung_data->empfehlungsanfrageAm = (new DateTime($result->retval[0]->insertamum))->format('d.m.Y');
// Get lectors who received request for recommendation // Get users who received request for recommendation
$lector_arr = self::getLectors($anrechnung_id); if($this->ci->config->item('fbl') === TRUE)
{
$res = $this->getLeitungOfLvOe($anrechnung_id);
}
else
{
$res = $this->getLectors($anrechnung_id);
}
if (!isEmptyArray($lector_arr)) if (!isEmptyArray($res))
{ {
$empfehlung_data->empfehlungsanfrageAn = implode(', ', array_column($lector_arr, 'fullname')); $empfehlung_data->empfehlungsanfrageAn = implode(', ', array_column($res, 'fullname'));
} }
} }
if (is_null($anrechnung->empfehlung_anrechnung)) if (is_null($anrechnung->empfehlung_anrechnung))
@@ -742,6 +760,25 @@ class AnrechnungLib
return hasData($result) ? true : false; return hasData($result) ? true : false;
} }
/**
* Check if user is allowed to recommend Anrechnung.
*
* @param $anrechnung_id
* @return bool
*/
public function isEmpfehlungsberechtigt($anrechnung_id)
{
if($this->ci->config->item('fbl') === TRUE)
{
return true;
}
// Get lv-leitungen or, if not present, all lectors of lv.
$lector_arr = $this->getLectors($anrechnung_id);
// Return false if lv-leitung is present and user is not lv-leitung. Otherways return always true.
return in_array(getAuthUID(), array_column($lector_arr, 'uid'));
}
/** /**
* Get LV Leitung. If not present, get all LV lectors. * Get LV Leitung. If not present, get all LV lectors.
* *
@@ -775,10 +812,13 @@ class AnrechnungLib
// Check if lv has LV-Leitung // Check if lv has LV-Leitung
$key = array_search(true, array_column($result, 'lvleiter')); $key = array_search(true, array_column($result, 'lvleiter'));
// If lv has LV-Leitung, keep only the one // If lv has 1 or more LV-Leitungen, keep only them
if ($key !== false) if ($key !== false)
{ {
$lector_arr[]= $result[$key]; foreach ($result as $lector)
{
if ($lector->lvleiter) $lector_arr[]= $lector;
}
} }
// ...otherwise keep all lectors // ...otherwise keep all lectors
else else
@@ -803,6 +843,40 @@ class AnrechnungLib
return $lector_arr; return $lector_arr;
} }
/**
* Get Leitung of Lehrveranstaltungs-Organisationseinheit.
*
* @param $anrechnung_id
* @return false|mixed|null
*/
public function getLeitungOfLvOe($anrechnung_id)
{
$this->ci->AnrechnungModel->addSelect('lehrveranstaltung_id');
$result = $this->ci->AnrechnungModel->load($anrechnung_id);
$lehrveranstaltung_id = getData($result)[0]->lehrveranstaltung_id;
// Get Leitungen
$result = $this->ci->LehrveranstaltungModel->getLeitungOfLvOe($lehrveranstaltung_id);
if (!hasData($result))
{
return false;
}
$oeLeitung_arr = getData($result);
foreach ($oeLeitung_arr as $oeLeitung)
{
$oeLeitung->fullname = $oeLeitung->vorname. ' '. $oeLeitung->nachname;
}
// Now make the array unique
$oeLeitung_arr = array_unique($oeLeitung_arr, SORT_REGULAR);
return $oeLeitung_arr;
}
// Return an object with Anrechnungdata // Return an object with Anrechnungdata
private function _setAnrechnungDataObject($anrechnung) private function _setAnrechnungDataObject($anrechnung)
{ {
-165
View File
@@ -7,9 +7,6 @@ if (! defined('BASEPATH')) exit('No direct script access allowed');
*/ */
class PersonLogLib class PersonLogLib
{ {
const PARKED_LOGNAME = 'Parked';
const ONHOLD_LOGNAME = 'Onhold';
/** /**
* Constructor * Constructor
*/ */
@@ -78,168 +75,6 @@ class PersonLogLib
else else
show_error(getError($result)); show_error(getError($result));
} }
/**
* Parks a person, i.e. marks a person so no actions are expected for the person (e.g. as a prestudent)
* Done by adding a logentry in the future
* @param $person_id
* @param $date
* @param $taetigkeit_kurzbz
* @param string $app
* @param null $oe_kurzbz
* @param null $user
* @return insert object
*/
public function park($person_id, $date, $taetigkeit_kurzbz, $app = 'core', $oe_kurzbz = null, $user = null)
{
$onhold = $this->getOnHoldDate($person_id);
if (hasData($onhold))
return error("Person already on hold");
$logjson = array(
'name' => self::PARKED_LOGNAME
);
return $this->_savePsLog($person_id, $date, $taetigkeit_kurzbz, $logjson, $app, $oe_kurzbz, $user);
}
/**
* Unparks a person, i.e. removes all log entries in the future with logname for parking
* @param $person_id
* @return array with deleted logids
*/
public function unPark($person_id)
{
$deleted = array();
$result = $this->ci->PersonLogModel->getLogsInFuture($person_id);
if (hasData($result))
{
foreach ($result->retval as $log)
{
$logdata = json_decode($log->logdata);
if (isset($logdata->name) && $logdata->name === self::PARKED_LOGNAME)
{
$delresult = $this->ci->PersonLogModel->deleteLog($log->log_id);
if (isSuccess($delresult))
{
$deleted[] = $log->log_id;
}
}
}
}
return success($deleted);
}
/**
* Gets date until which a person is parked
* @param $person_id
* @return the date if person is parked, null otherwise
*/
public function getParkedDate($person_id)
{
$result = $this->ci->PersonLogModel->getLogsInFuture($person_id);
$parkeddate = null;
if (hasData($result))
{
foreach ($result->retval as $log)
{
$logdata = json_decode($log->logdata);
if (isset($logdata->name) && $logdata->name === self::PARKED_LOGNAME)
{
$parkeddate = $log->zeitpunkt;
break;
}
}
}
return $parkeddate;
}
/**
* Sets person on hold, i.e. marks a person so no actions are expected for the person (e.g. as a prestudent).
* Done by adding a logentry with a special name. can be undone only manually by clicking button.
* @param $person_id
* @param $date
* @param $taetigkeit_kurzbz
* @param string $app
* @param null $oe_kurzbz
* @param null $user
* @return array
*/
public function setOnHold($person_id, $date, $taetigkeit_kurzbz, $app = 'core', $oe_kurzbz = null, $user = null)
{
$parked = $this->getParkedDate($person_id);
if (hasData($parked))
return error("Person already parked");
$logjson = array(
'name' => self::ONHOLD_LOGNAME
);
return $this->_savePsLog($person_id, $date, $taetigkeit_kurzbz, $logjson, $app, $oe_kurzbz, $user);
}
/**
* Removes on hold status, i.e. removes all log entries with logname for on hold
* @param $person_id
* @return array
*/
public function removeOnHold($person_id)
{
$deleted = array();
$result = $this->ci->PersonLogModel->filterLog($person_id);
if (hasData($result))
{
foreach ($result->retval as $log)
{
$logdata = json_decode($log->logdata);
if (isset($logdata->name) && $logdata->name === self::ONHOLD_LOGNAME)
{
$delresult = $this->ci->PersonLogModel->deleteLog($log->log_id);
if (isSuccess($delresult))
{
$deleted[] = $log->log_id;
}
}
}
}
return success($deleted);
}
/**
* Gets date until which a person is on hold
* @param $person_id
* @return the date if person is on hold, null otherwise
*/
public function getOnHoldDate($person_id)
{
$result = $this->ci->PersonLogModel->filterLog($person_id);
$onholddate = null;
if (hasData($result))
{
foreach ($result->retval as $log)
{
$logdata = json_decode($log->logdata);
if (isset($logdata->name) && $logdata->name === self::ONHOLD_LOGNAME)
{
$onholddate = $log->zeitpunkt;
break;
}
}
}
return $onholddate;
}
/** /**
* Saves a processstate log with specified parameters, including a specified log date. * Saves a processstate log with specified parameters, including a specified log date.
* @param $person_id * @param $person_id
+75
View File
@@ -0,0 +1,75 @@
<?php
/**
* Copyright (C) 2022 fhcomplete.net
*
* 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.
*
*/
require_once(dirname(__FILE__).'/../../vendor/nategood/httpful/bootstrap.php');
/**
* Simple client to call the signature server
*/
class SignatureLib
{
// -------------------------------------------------------------------------------------------------
// Public static methods
/**
* Returns the list of signature inside the given file
*/
public static function list($inputFileName)
{
try
{
// Get the content of the given file
$inputFileContent = file_get_contents($inputFileName);
if ($inputFileContent === false) // if failed
{
error_log('An error occurred while getting the content from: '.$inputFileName);
}
else
{
// Posts the given file content + file name and expects a response in JSON format
$resultPost = \Httpful\Request::post(SIGNATUR_URL.'/'.SIGNATUR_LIST_API)
->sendsJson()
->authenticateWith(SIGNATUR_USER, SIGNATUR_PASSWORD)
->body('{"filename": "'.basename($inputFileName).'", "content": "'.base64_encode($inputFileContent).'"}')
->expectsJson()
->send();
}
}
catch(\Httpful\Exception\ConnectionErrorException $cee) // Httpful exception
{
error_log($cee->getMessage());
}
catch (Exception $e) // any other exception
{
error_log($e->getMessage());
}
// If the response is fine
if (isset($resultPost->body) && is_object($resultPost->body)
&& isset($resultPost->body->retval) && is_array($resultPost->body->retval))
{
return $resultPost->body->retval;
}
// Otherwise return a null as error
return null;
}
}
@@ -0,0 +1,14 @@
<?php
class RueckstellungStatus_model extends DB_Model
{
/**
* Constructor
*/
public function __construct()
{
parent::__construct();
$this->dbTable = 'public.tbl_rueckstellung_status';
$this->pk = 'status_kurzbz';
}
}
@@ -0,0 +1,33 @@
<?php
class Rueckstellung_model extends DB_Model
{
/**
* Constructor
*/
public function __construct()
{
parent::__construct();
$this->dbTable = 'public.tbl_rueckstellung';
$this->pk = 'rueckstellung_id';
$this->hasSequence = true;
}
public function getByPersonId($person_id, $status = null)
{
$language_index = getUserLanguage() == 'German' ? 0 : 1;
$this->addLimit(1);
$this->addJoin('tbl_rueckstellung_status', 'status_kurzbz');
$this->addSelect('*,
array_to_json(bezeichnung_mehrsprachig::varchar[])->>'.$language_index . 'as bezeichnung');
$this->addOrder('datum_bis', 'DESC');
$where['person_id'] = $person_id;
if (!isEmptyString($status))
$where['status_kurzbz'] = $status;
return $this->loadWhere($where);
}
}
@@ -0,0 +1,87 @@
<?php
class Anrechnungszeitraum_model extends DB_Model
{
/**
* Constructor
*/
public function __construct()
{
parent::__construct();
$this->dbTable = 'lehre.tbl_anrechnungszeitraum';
$this->pk = 'anrechnungszeitraum_id';
}
/**
* Save new Anrechnungszeitraum.
*
* @param $studiensemester_kurzbz
* @param $anrechnungstart
* @param $anrechnungende
* @return array|stdClass
*/
public function insertAzr($studiensemester_kurzbz, $anrechnungstart, $anrechnungende)
{
$result = $this->insert(array(
'studiensemester_kurzbz' => $studiensemester_kurzbz,
'anrechnungstart' => $anrechnungstart,
'anrechnungende' => $anrechnungende,
'insertvon' => getAuthUID()
));
if (isError($result))
{
return error('Fehler bei Anrechnungszeitraum speichern.');
}
// Return new anrechnungszeitraum_id
return success($result->retval);
}
/**
* Delete Anrechnungszeitraum.
*
* @param $anrechnungszeitraum_id
* @return array|stdClass
*/
public function deleteAzr($anrechnungszeitraum_id)
{
$result = $this->delete(array('anrechnungszeitraum_id' => $anrechnungszeitraum_id));
if (isError($result))
{
return error('Fehler bei Anrechnungszeitraum löschen.');
}
return success($result->retval);
}
/**
* Update existing Anrechnungszeitraum.
*
* @param $anrechnungszeitraum_id
* @param $studiensemester_kurzbz
* @param $anrechnungstart
* @param $anrechnungende
* @return array|stdClass
*/
public function updateAzr($anrechnungszeitraum_id, $studiensemester_kurzbz, $anrechnungstart, $anrechnungende)
{
$result = $this->update(
$anrechnungszeitraum_id,
array(
'studiensemester_kurzbz' => $studiensemester_kurzbz,
'anrechnungstart' => $anrechnungstart,
'anrechnungende' => $anrechnungende
)
);
if (isError($result))
{
return error('Fehler bei Anrechnungszeitraum update.');
}
return success($result->retval);
}
}
@@ -200,6 +200,28 @@ class Lehrveranstaltung_model extends DB_Model
return $this->execQuery($query, array($lehrveranstaltung_id, $studiensemester_kurzbz)); return $this->execQuery($query, array($lehrveranstaltung_id, $studiensemester_kurzbz));
} }
/**
* Gets all Leiter of Lehrveranstaltungsorganisationseinheit
* @param $lehrveranstaltung_id
* @return array|null
*/
public function getLeitungOfLvOe($lehrveranstaltung_id)
{
$query = "select distinct vorname, nachname, uid
FROM
lehre.tbl_lehrveranstaltung lv
JOIN public.tbl_organisationseinheit og using (oe_kurzbz)
JOIN public.tbl_benutzerfunktion bf using (oe_kurzbz)
join public.tbl_benutzer b using (uid)
join public.tbl_person p using (person_id)
where
bf.datum_von <= now()::date
and (bf.datum_bis >= now()::date or bf.datum_bis is null)
and bf.funktion_kurzbz = 'Leitung' -- Leitung of LV-OE
and lehrveranstaltung_id = ?";
return $this->execQuery($query, array($lehrveranstaltung_id));
}
/** /**
* Gets Lehrveranstaltungen of a student * Gets Lehrveranstaltungen of a student
@@ -0,0 +1,137 @@
<?php
$includesArray = array(
'title' => $this->p->t('anrechnung', 'anrechnungenVerwalten'),
'jquery3' => true,
'jqueryui1' => true,
'bootstrap3' => true,
'fontawesome6' => true,
'ajaxlib' => true,
'dialoglib' => true,
'tabulator4' => true,
'tablewidget' => true,
'sbadmintemplate3' => true,
'navigationwidget' => true,
'phrases' => array(
'anrechnung' => array(
'anrechnungenVerwalten',
'anrechnungszeitraumFestlegen',
'anrechnungszeitraumHinzufuegen',
'anrechnungszeitraumSpeichern',
'anrechnungszeitraumStart',
'anrechnungszeitraumEnde'
),
'ui' => array(
'aktion',
'geloescht',
'gespeichert',
'frageSicherLoeschen',
'spaltenEinstellen'
),
'lehre' => array('studiensemester'),
'table' => array(
'spaltenEinAusblenden',
'spaltenEinAusblendenMitKlickOeffnen',
'spaltenEinAusblendenAufEinstellungenKlicken',
'spaltenEinAusblendenMitKlickAktivieren',
'spaltenEinAusblendenMitKlickSchliessen',
'spaltenbreiteVeraendern',
'spaltenbreiteVeraendernText',
'spaltenbreiteVeraendernInfotext',
'zeilenAuswaehlen',
'zeilenAuswaehlenEinzeln',
'zeilenAuswaehlenBereich',
'zeilenAuswaehlenAlle'
)
),
'customJSs' => array(
'public/js/bootstrapper.js',
'public/js/lehre/anrechnung/adminAnrechnung.js'
),
'customCSSs' => array(
'public/css/sbadmin2/tablesort_bootstrap.css'
)
);
$this->load->view('templates/FHC-Header', $includesArray);
?>
<div id="wrapper">
<?php echo $this->widgetlib->widget('NavigationWidget'); ?>
<div id="page-wrapper">
<div class="container-fluid">
<!--Titel-->
<div class="page-header">
<h3><?php echo $this->p->t('anrechnung', 'anrechnungenVerwalten'); ?></h3>
</div><br>
<!--Untertitel-->
<h4><?php echo $this->p->t('anrechnung', 'anrechnungszeitraumFestlegen'); ?></h4><br>
<div class="row">
<div class="col-xs-4">
<button class="btn btn-primary azrOpenModal" data-toggle="modal" data-target="#azrModal">
<i class="fa fa-plus"></i> <?php echo $this->p->t('anrechnung', 'anrechnungszeitraumHinzufuegen'); ?>
</button>
</div>
</div>
<!-- Tabelle -->
<div class="row">
<div class="col-lg-12">
<?php $this->load->view('lehre/anrechnung/adminAnrechnungData.php'); ?>
</div>
</div>
<!-- Modal (für insert und update von Anrechnungszeitraum)-->
<div class="modal fade" id="azrModal" tabindex="-1" role="dialog" aria-labelledby="azrModalLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="azrModalLabel"></h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
</div>
<div class="modal-body">
<div class="row">
<input type="hidden" id="anrechnungszeitraum_id" value="">
<input type="hidden" id="defaultStudiensemester_kurzbz" value="<?php echo $studiensemester_kurzbz ?>">
<div class="col-xs-4">
<label for="studiensemester" class="small">Studiensemester</label>
<?php
echo $this->widgetlib->widget(
'Studiensemester_widget',
array(
DropdownWidget::SELECTED_ELEMENT => $studiensemester_kurzbz
),
array(
'name' => 'studiensemester',
'id' => 'studiensemester'
)
);
?>
</div>
<div class="col-xs-4">
<label for="azrStart" class="small">Anr.-Zeitraum Start</label>
<input type="date" id="azrStart" value="" class="form-control" required>
</div>
<div class="col-xs-4">
<label for="azrEnde" class="small">Anr.-Zeitraum Ende</label>
<input type="date" id="azrEnde" value="" class="form-control" required>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" id="azrInsertBtn" class="btn btn-primary" value=""><?php echo $this->p->t('ui', 'speichern'); ?></button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<?php $this->load->view('templates/FHC-Footer', $includesArray); ?>
@@ -0,0 +1,45 @@
<?php
$query = '
SELECT *
FROM lehre.tbl_anrechnungszeitraum
ORDER BY anrechnungstart DESC
';
$filterWidgetArray = array(
'query' => $query,
'tableUniqueId' => 'adminAnrechnung',
'requiredPermissions' => 'lehre/anrechnungszeitfenster',
'datasetRepresentation' => 'tabulator',
'columnsAliases' => array(
'AzrID',
ucfirst($this->p->t('lehre', 'studiensemester')),
ucfirst($this->p->t('anrechnung', 'anrechnungszeitraumStart')),
ucfirst($this->p->t('anrechnung', 'anrechnungszeitraumEnde')),
ucfirst($this->p->t('ui', 'bearbeitetAm')),
ucfirst($this->p->t('ui', 'bearbeitetVon')),
),
'datasetRepOptions' => '{
height: func_height(this),
layout: "fitDataFill",
persistentLayout:true,
autoResize: false, // prevent auto resizing of table (false to allow adapting table size when cols are (de-)activated
headerFilterPlaceholder: " ",
index: "anrechnungszeitraum_id", // assign specific column as unique id (important for row indexing)
selectable: false, // allow row selection
tableWidgetHeader: true,
tableBuilt: function(){
func_tableBuilt(this);
},
}',
'datasetRepFieldsDefs' => '{
anrechnungszeitraum_id: {visible: false, headerFilter:"input"},
studiensemester_kurzbz: {headerFilter:"input"},
anrechnungstart: {headerFilter:"input", formatter: formatDate},
anrechnungende: {headerFilter:"input", formatter: formatDate},
insertamum: {visible: false, headerFilter:"input"},
insertvon: {visible: false, headerFilter:"input"}
}'
);
echo $this->widgetlib->widget('TableWidget', $filterWidgetArray);
@@ -23,6 +23,7 @@ $this->load->view(
'systemfehler', 'systemfehler',
'bitteMindEinenAntragWaehlen', 'bitteMindEinenAntragWaehlen',
'bitteBegruendungAngeben', 'bitteBegruendungAngeben',
'bitteBegruendungVervollstaendigen',
'empfehlungWurdeAngefordert', 'empfehlungWurdeAngefordert',
'anrechnungenWurdenGenehmigt', 'anrechnungenWurdenGenehmigt',
'anrechnungenWurdenAbgelehnt', 'anrechnungenWurdenAbgelehnt',
@@ -322,14 +323,6 @@ $this->load->view(
<i class="fa fa-clipboard fa-lg" aria-hidden="true"></i> <i class="fa fa-clipboard fa-lg" aria-hidden="true"></i>
</span> </span>
</li> </li>
<li class="list-group-item">
<span><?php echo $this->p->t('anrechnung', 'genehmigungNegativKenntnisseNichtGleichwertig'); ?></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"> <li class="list-group-item">
<span><?php echo $this->p->t('anrechnung', 'genehmigungNegativEctsHoechstgrenzeUeberschritten'); ?></span> <span><?php echo $this->p->t('anrechnung', 'genehmigungNegativEctsHoechstgrenzeUeberschritten'); ?></span>
<span class="btn-copyIntoTextarea pull-right" data-toggle="tooltip" <span class="btn-copyIntoTextarea pull-right" data-toggle="tooltip"
@@ -338,6 +331,14 @@ $this->load->view(
<i class="fa fa-clipboard fa-lg" aria-hidden="true"></i> <i class="fa fa-clipboard fa-lg" aria-hidden="true"></i>
</span> </span>
</li> </li>
<li class="list-group-item">
<span><?php echo $this->p->t('anrechnung', 'genehmigungNegativKenntnisseNichtGleichwertigWeil'); ?></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"> <li class="list-group-item">
<span><?php echo $this->p->t('anrechnung', 'genehmigungNegativEmpfehlungstextUebernehmen'); ?></span> <span><?php echo $this->p->t('anrechnung', 'genehmigungNegativEmpfehlungstextUebernehmen'); ?></span>
<span id="empfehlungstextUebernehmen" class="btn-copyIntoTextarea pull-right" data-toggle="tooltip" <span id="empfehlungstextUebernehmen" class="btn-copyIntoTextarea pull-right" data-toggle="tooltip"
@@ -346,6 +347,9 @@ $this->load->view(
<i class="fa fa-clipboard fa-lg" aria-hidden="true"></i> <i class="fa fa-clipboard fa-lg" aria-hidden="true"></i>
</span> </span>
</li> </li>
<li class="list-group-item" onclick="{ $(this).closest('div').find('textarea').val('').focus()}">
<span><?php echo $this->p->t('anrechnung', 'andereBegruendung'); ?></span>
</li>
</ul> </ul>
<textarea class="form-control" name="begruendung" <textarea class="form-control" name="begruendung"
id="approveAnrechnungDetail-begruendung" id="approveAnrechnungDetail-begruendung"
@@ -124,7 +124,7 @@ $this->load->view(
<!-- Tabelle --> <!-- Tabelle -->
<div class="row"> <div class="row">
<div class="col-xs-12"> <div class="col-xs-12">
<?php $this->load->view('lehre/anrechnung/approveAnrechnungUebersichtData.php'); ?> <?php $this->load->view('lehre/anrechnung/approveAnrechnungUebersichtData.php'); ?>
</div> </div>
</div> </div>
<!-- Genehmigen / Ablehnen Panel --> <!-- Genehmigen / Ablehnen Panel -->
@@ -145,18 +145,13 @@ $this->load->view(
<i class="fa fa-clipboard fa-lg" aria-hidden="true"></i> <i class="fa fa-clipboard fa-lg" aria-hidden="true"></i>
</span> </span>
</li> </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'); ?> <li class="list-group-item"><?php echo $this->p->t('anrechnung', 'genehmigungNegativEctsHoechstgrenzeUeberschritten'); ?>
<span class="btn-copyIntoTextarea pull-right" data-toggle="tooltip" data-placement="left" <span class="btn-copyIntoTextarea pull-right" data-toggle="tooltip" data-placement="left"
title="<?php echo $this->p->t('ui', 'textUebernehmen'); ?>"> title="<?php echo $this->p->t('ui', 'textUebernehmen'); ?>">
<i class="fa fa-clipboard fa-lg" aria-hidden="true"></i> <i class="fa fa-clipboard fa-lg" aria-hidden="true"></i>
</span> </span>
</li> </li>
<li class="list-group-item disabled"><?php echo $this->p->t('anrechnung', 'genehmigungNegativKenntnisseNichtGleichwertigWeilHinweis'); ?></li>
</ol> </ol>
<textarea class="form-control" name="begruendung" id="approveAnrechnungUebersicht-begruendung" <textarea class="form-control" name="begruendung" id="approveAnrechnungUebersicht-begruendung"
rows="2" rows="2"
@@ -3,8 +3,9 @@ const ANRECHNUNGSTATUS_PROGRESSED_BY_STGL = 'inProgressDP';
const ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR = 'inProgressLektor'; const ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR = 'inProgressLektor';
$STUDIENSEMESTER = $studiensemester_selected; $STUDIENSEMESTER = $studiensemester_selected;
$STUDIENGAENGE_ENTITLED = implode(', ', $studiengaenge_entitled); $STUDIENGAENGE_ENTITLED = implode(', ', $studiengaenge_entitled); // alle STG mit Lese- und Schreibberechtigung
$LANGUAGE_INDEX = getUserLanguage() == 'German' ? '0' : '1'; $ORGANISATIONSEINHEITEN_SCHREIBBERECHTIGT = "'". implode('\',\'', $oes_schreibberechtigt). "'"; // alle OE nur mit Schreibberechtigung; singlequote für jeden string notwendig
$LANGUAGE_INDEX = getUserLanguage() == 'German' ? '1' : '2';
$query = ' $query = '
WITH anrechnungen AS WITH anrechnungen AS
@@ -14,6 +15,10 @@ $query = '
anrechnung.lehrveranstaltung_id, anrechnung.lehrveranstaltung_id,
anrechnung.begruendung_id, anrechnung.begruendung_id,
anrechnung.dms_id, anrechnung.dms_id,
CASE
WHEN stg.typ || stg.kurzbz IN (' . $ORGANISATIONSEINHEITEN_SCHREIBBERECHTIGT . ') THEN TRUE
ELSE FALSE
END "schreibberechtigt",
anrechnung.studiensemester_kurzbz, anrechnung.studiensemester_kurzbz,
stg.studiengang_kz, stg.studiengang_kz,
stg.bezeichnung AS stg_bezeichnung, stg.bezeichnung AS stg_bezeichnung,
@@ -35,8 +40,8 @@ $query = '
dmsversion.name AS "dokument_bezeichnung", dmsversion.name AS "dokument_bezeichnung",
anrechnung.anmerkung_student, anrechnung.anmerkung_student,
(SELECT COALESCE( (SELECT COALESCE(
array_to_json(zgvmaster.bezeichnung::varchar[])->>' . $LANGUAGE_INDEX . ', zgvmaster.bezeichnung[' . $LANGUAGE_INDEX . '],
array_to_json(zgv.bezeichnung::varchar[])->>' . $LANGUAGE_INDEX . ' zgv.bezeichnung[' . $LANGUAGE_INDEX . ']
) AS zgv ) AS zgv
FROM public.tbl_prestudent FROM public.tbl_prestudent
LEFT JOIN bis.tbl_zgv zgv USING (zgv_code) LEFT JOIN bis.tbl_zgv zgv USING (zgv_code)
@@ -71,6 +76,7 @@ $query = '
anrechnungen.lehrveranstaltung_id, anrechnungen.lehrveranstaltung_id,
anrechnungen.begruendung_id, anrechnungen.begruendung_id,
anrechnungen.dms_id, anrechnungen.dms_id,
anrechnungen.schreibberechtigt,
anrechnungen.studiensemester_kurzbz, anrechnungen.studiensemester_kurzbz,
anrechnungen.studiengang_kz, anrechnungen.studiengang_kz,
anrechnungen.stg_bezeichnung, anrechnungen.stg_bezeichnung,
@@ -89,7 +95,7 @@ $query = '
anrechnungen.antragsdatum, anrechnungen.antragsdatum,
anrechnungen.empfehlung_anrechnung, anrechnungen.empfehlung_anrechnung,
anrechnungen.status_kurzbz, anrechnungen.status_kurzbz,
array_to_json(anrechnungstatus.bezeichnung_mehrsprachig::varchar[])->>' . $LANGUAGE_INDEX . ' AS "status_bezeichnung", anrechnungstatus.bezeichnung_mehrsprachig[' . $LANGUAGE_INDEX . '] AS "status_bezeichnung",
anrechnungen.prestudent_id, anrechnungen.prestudent_id,
CASE CASE
WHEN (anrechnungen.empfehlung_anrechnung IS NULL AND anrechnungen.status_kurzbz = \'' . ANRECHNUNGSTATUS_PROGRESSED_BY_STGL . '\') THEN NULL WHEN (anrechnungen.empfehlung_anrechnung IS NULL AND anrechnungen.status_kurzbz = \'' . ANRECHNUNGSTATUS_PROGRESSED_BY_STGL . '\') THEN NULL
@@ -101,8 +107,39 @@ $query = '
AND status_kurzbz = \'' . ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR . '\' AND status_kurzbz = \'' . ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR . '\'
ORDER BY insertamum DESC ORDER BY insertamum DESC
LIMIT 1) LIMIT 1)
END "empfehlungsanfrageAm", END "empfehlungsanfrageAm",';
CASE
if ($configFachbereichsleitung === TRUE)
{
$query.= ' 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), \', \')
) empfehlungsanfrageAn
FROM (
SELECT DISTINCT ON (benutzer.uid) bf.uid, vorname, nachname
FROM lehre.tbl_lehreinheit
JOIN lehre.tbl_lehrveranstaltung lv using (lehrveranstaltung_id)
JOIN public.tbl_organisationseinheit og using (oe_kurzbz)
JOIN public.tbl_benutzerfunktion bf using (oe_kurzbz)
JOIN public.tbl_benutzer benutzer ON bf.uid = benutzer.uid
JOIN public.tbl_person USING (person_id)
WHERE studiensemester_kurzbz = \'' . $STUDIENSEMESTER . '\'
and bf.datum_von <= now()
and (bf.datum_bis >= now() or bf.datum_bis is null)
AND bf.funktion_kurzbz = \'Leitung\'
AND lehrveranstaltung_id = anrechnungen.lehrveranstaltung_id
AND benutzer.aktiv = TRUE
AND tbl_person.aktiv = TRUE
ORDER BY benutzer.uid, nachname, vorname
) as tmp_empfehlungsanfrageEmpfaenger
)
END "empfehlungsanfrageAn"';
}
else
{
$query.= ' CASE
WHEN (anrechnungen.empfehlung_anrechnung IS NULL AND anrechnungen.status_kurzbz = \'' . ANRECHNUNGSTATUS_PROGRESSED_BY_STGL . '\') THEN NULL WHEN (anrechnungen.empfehlung_anrechnung IS NULL AND anrechnungen.status_kurzbz = \'' . ANRECHNUNGSTATUS_PROGRESSED_BY_STGL . '\') THEN NULL
ELSE ELSE
(SELECT COALESCE( (SELECT COALESCE(
@@ -122,10 +159,12 @@ $query = '
AND benutzer.aktiv = TRUE AND benutzer.aktiv = TRUE
AND tbl_person.aktiv = TRUE AND tbl_person.aktiv = TRUE
ORDER BY benutzer.uid, lvleiter DESC, nachname, vorname ORDER BY benutzer.uid, lvleiter DESC, nachname, vorname
) as tmp_lvlektoren ) as tmp_empfehlungsanfrageEmpfaenger
) )
END "empfehlungsanfrageAn" END "empfehlungsanfrageAn"';
FROM anrechnungen }
$query.= ' FROM anrechnungen
JOIN lehre.tbl_anrechnungstatus as anrechnungstatus ON (anrechnungstatus.status_kurzbz = anrechnungen.status_kurzbz) JOIN lehre.tbl_anrechnungstatus as anrechnungstatus ON (anrechnungstatus.status_kurzbz = anrechnungen.status_kurzbz)
WHERE studiensemester_kurzbz = \'' . $STUDIENSEMESTER . '\' WHERE studiensemester_kurzbz = \'' . $STUDIENSEMESTER . '\'
AND studiengang_kz IN (' . $STUDIENGAENGE_ENTITLED . ') AND studiengang_kz IN (' . $STUDIENGAENGE_ENTITLED . ')
@@ -141,6 +180,7 @@ $filterWidgetArray = array(
'lehrveranstaltung_id', 'lehrveranstaltung_id',
'begruendung_id', 'begruendung_id',
'dms_id', 'dms_id',
'Schreibberechtigt',
'studiensemester_kurzbz', 'studiensemester_kurzbz',
'studiengang_kz', 'studiengang_kz',
ucfirst($this->p->t('lehre', 'studiengang')), ucfirst($this->p->t('lehre', 'studiengang')),
@@ -167,9 +207,7 @@ $filterWidgetArray = array(
'datasetRepOptions' => '{ 'datasetRepOptions' => '{
height: func_height(this), height: func_height(this),
layout: "fitColumns", // fit columns to width of table layout: "fitColumns", // fit columns to width of table
persistentLayout:true, persistenceID: "approveAnrechnungUebersicht_V1",
persistentSort:true,
persistentFilter:true,
autoResize: false, // prevent auto resizing of table (false to allow adapting table size when cols are (de-)activated autoResize: false, // prevent auto resizing of table (false to allow adapting table size when cols are (de-)activated
headerFilterPlaceholder: " ", headerFilterPlaceholder: " ",
index: "anrechnung_id", // assign specific column as unique id (important for row indexing) index: "anrechnung_id", // assign specific column as unique id (important for row indexing)
@@ -200,6 +238,10 @@ $filterWidgetArray = array(
lehrveranstaltung_id: {visible: false, headerFilter:"input"}, lehrveranstaltung_id: {visible: false, headerFilter:"input"},
begruendung_id: {visible: false, headerFilter:"input"}, begruendung_id: {visible: false, headerFilter:"input"},
dms_id: {visible: false, headerFilter:"input"}, dms_id: {visible: false, headerFilter:"input"},
schreibberechtigt: {
formatter:"tickCross", align:"center",
headerFilter:"tickCross", headerFilterParams:{tristate: true}, headerFilterFunc: hf_schreibberechtigt
},
studiensemester_kurzbz: {visible: false, headerFilter:"input"}, studiensemester_kurzbz: {visible: false, headerFilter:"input"},
studiengang_kz: {visible: false, headerFilter:"input"}, studiengang_kz: {visible: false, headerFilter:"input"},
stg_bezeichnung: {headerFilter:"input"}, stg_bezeichnung: {headerFilter:"input"},
@@ -212,7 +254,7 @@ $filterWidgetArray = array(
ectsSumBeruflich: {visible: false, headerFilter:"input", align:"right"}, ectsSumBeruflich: {visible: false, headerFilter:"input", align:"right"},
begruendung: {headerFilter:"input", visible: true}, begruendung: {headerFilter:"input", visible: true},
student: {headerFilter:"input"}, student: {headerFilter:"input"},
zgv: {visible: false, headerFilter:"input"}, zgv: {headerFilter:"input"},
dokument_bezeichnung: {headerFilter:"input", formatter:"link", formatterParams: paramLookup_dokBez}, dokument_bezeichnung: {headerFilter:"input", formatter:"link", formatterParams: paramLookup_dokBez},
anmerkung_student: {headerFilter:"input"}, anmerkung_student: {headerFilter:"input"},
antragsdatum: {align:"center", headerFilter:"input", mutator: mut_formatStringDate}, antragsdatum: {align:"center", headerFilter:"input", mutator: mut_formatStringDate},
@@ -2,7 +2,7 @@
$STUDIENSEMESTER = $studiensemester_selected; $STUDIENSEMESTER = $studiensemester_selected;
$STUDIENGAENGE_ENTITLED = implode(', ', $studiengaenge_entitled); $STUDIENGAENGE_ENTITLED = implode(', ', $studiengaenge_entitled);
$LANGUAGE_INDEX = getUserLanguage() == 'German' ? '0' : '1'; $LANGUAGE_INDEX = getUserLanguage() == 'German' ? '1' : '2';
$query = ' $query = '
SELECT pst.prestudent_id, SELECT pst.prestudent_id,
@@ -14,8 +14,8 @@ $query = '
nachname, nachname,
vorname, vorname,
(SELECT COALESCE( (SELECT COALESCE(
array_to_json(zgvmaster.bezeichnung::varchar[])->>' . $LANGUAGE_INDEX . ', zgvmaster.bezeichnung[' . $LANGUAGE_INDEX . '],
array_to_json(zgv.bezeichnung::varchar[])->>' . $LANGUAGE_INDEX . ' zgv.bezeichnung[' . $LANGUAGE_INDEX . ']
) AS zgv ) AS zgv
FROM public.tbl_prestudent FROM public.tbl_prestudent
LEFT JOIN bis.tbl_zgv zgv USING (zgv_code) LEFT JOIN bis.tbl_zgv zgv USING (zgv_code)
@@ -21,6 +21,7 @@ $this->load->view(
'systemfehler', 'systemfehler',
'bitteMindEinenAntragWaehlen', 'bitteMindEinenAntragWaehlen',
'bitteBegruendungAngeben', 'bitteBegruendungAngeben',
'bitteBegruendungVervollstaendigen',
'anrechnungenWurdenEmpfohlen', 'anrechnungenWurdenEmpfohlen',
'anrechnungenWurdenNichtEmpfohlen' 'anrechnungenWurdenNichtEmpfohlen'
), ),
@@ -234,13 +235,16 @@ $this->load->view(
</span> </span>
</li> </li>
<li class="list-group-item"> <li class="list-group-item">
<span><?php echo $this->p->t('anrechnung', 'empfehlungNegativKenntnisseNichtGleichwertig'); ?></span>&emsp; <span><?php echo $this->p->t('anrechnung', 'empfehlungNegativKenntnisseNichtGleichwertigWeil'); ?></span>&emsp;
<span class="btn-copyIntoTextarea pull-right" data-toggle="tooltip" <span class="btn-copyIntoTextarea pull-right" data-toggle="tooltip"
data-placement="right" data-placement="right"
title="<?php echo $this->p->t('ui', 'textUebernehmen'); ?>"> title="<?php echo $this->p->t('ui', 'textUebernehmen'); ?>">
<i class="fa fa-clipboard fa-lg" aria-hidden="true"></i> <i class="fa fa-clipboard fa-lg" aria-hidden="true"></i>
</span> </span>
</li> </li>
<li class="list-group-item" onclick="{ $(this).closest('div').find('textarea').val('').focus()}">
<span><?php echo $this->p->t('anrechnung', 'andereBegruendung'); ?></span>
</li>
</ul> </ul>
<textarea class="form-control" name="begruendung" <textarea class="form-control" name="begruendung"
id="reviewAnrechnungDetail-begruendung" id="reviewAnrechnungDetail-begruendung"
@@ -287,12 +291,12 @@ $this->load->view(
<div class="pull-right"> <div class="pull-right">
<button id="reviewAnrechnungDetail-dont-recommend-anrechnung-ask" class="btn btn-danger btn-w200" <button id="reviewAnrechnungDetail-dont-recommend-anrechnung-ask" class="btn btn-danger btn-w200"
type="button" type="button"
<?php echo is_null($empfehlungData->empfehlung) ? '' : 'disabled' ?>> <?php echo (is_null($empfehlungData->empfehlung) && $isEmpfehlungsberechtigt) ? '' : 'disabled' ?>>
<?php echo ucfirst($this->p->t('anrechnung', 'nichtEmpfehlen')); ?> <?php echo ucfirst($this->p->t('anrechnung', 'nichtEmpfehlen')); ?>
</button> </button>
<button id="reviewAnrechnungDetail-recommend-anrechnung-ask" class="btn btn-primary btn-w200" <button id="reviewAnrechnungDetail-recommend-anrechnung-ask" class="btn btn-primary btn-w200"
type="button" type="button"
<?php echo is_null($empfehlungData->empfehlung) ? '' : 'disabled' ?>> <?php echo (is_null($empfehlungData->empfehlung) && $isEmpfehlungsberechtigt) ? '' : 'disabled' ?>>
<?php echo ucfirst($this->p->t('anrechnung', 'empfehlen')); ?> <?php echo ucfirst($this->p->t('anrechnung', 'empfehlen')); ?>
</button> </button>
</div> </div>
@@ -117,7 +117,7 @@ $this->load->view(
<!-- Tabelle --> <!-- Tabelle -->
<div class="row"> <div class="row">
<div class="col-xs-12"> <div class="col-xs-12">
<?php $this->load->view('lehre/anrechnung/reviewAnrechnungUebersichtData.php'); ?> <?php $this->load->view('lehre/anrechnung/reviewAnrechnungUebersichtData.php');?>
</div> </div>
</div> </div>
<!-- Empfehlung / Nicht Empfehlung Panel --> <!-- Empfehlung / Nicht Empfehlung Panel -->
@@ -139,12 +139,8 @@ $this->load->view(
<i class="fa fa-clipboard fa-lg" aria-hidden="true"></i> <i class="fa fa-clipboard fa-lg" aria-hidden="true"></i>
</span> </span>
</li> </li>
<li class="list-group-item"> <li class="list-group-item disabled">
<span><?php echo $this->p->t('anrechnung', 'empfehlungNegativKenntnisseNichtGleichwertig'); ?></span> <?php echo $this->p->t('anrechnung', 'empfehlungNegativKenntnisseNichtGleichwertigWeilHinweis'); ?>
<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>
</ul> </ul>
<textarea class="form-control" name="begruendung" id="reviewAnrechnungUebersicht-begruendung" <textarea class="form-control" name="begruendung" id="reviewAnrechnungUebersicht-begruendung"
@@ -1,12 +1,12 @@
<?php <?php
$STUDIENSEMESTER = $studiensemester_selected; $STUDIENSEMESTER = $studiensemester_selected;
$LEKTOR_UID = getAuthUID(); $LEKTOR_UID = getAuthUID();
$LANGUAGE_INDEX = getUserLanguage() == 'German' ? '0' : '1'; $LANGUAGE_INDEX = getUserLanguage() == 'German' ? '1' : '2';
$query = ' $query = '
WITH anrechnungen AS WITH anrechnungen AS
( (
SELECT DISTINCT SELECT DISTINCT ON (anrechnung_id)
anrechnung.anrechnung_id, anrechnung.anrechnung_id,
anrechnung.lehrveranstaltung_id, anrechnung.lehrveranstaltung_id,
anrechnung.begruendung_id, anrechnung.begruendung_id,
@@ -21,8 +21,8 @@ $query = '
dmsversion.name AS "dokument_bezeichnung", dmsversion.name AS "dokument_bezeichnung",
anrechnung.anmerkung_student, anrechnung.anmerkung_student,
(SELECT COALESCE( (SELECT COALESCE(
array_to_json(zgvmaster.bezeichnung::varchar[])->>' . $LANGUAGE_INDEX . ', zgvmaster.bezeichnung[' . $LANGUAGE_INDEX . '],
array_to_json(zgv.bezeichnung::varchar[])->>' . $LANGUAGE_INDEX . ' zgv.bezeichnung[' . $LANGUAGE_INDEX . ']
) AS zgv ) AS zgv
FROM public.tbl_prestudent FROM public.tbl_prestudent
LEFT JOIN bis.tbl_zgv zgv USING (zgv_code) LEFT JOIN bis.tbl_zgv zgv USING (zgv_code)
@@ -37,7 +37,8 @@ $query = '
WHERE anrechnung_id = anrechnung.anrechnung_id WHERE anrechnung_id = anrechnung.anrechnung_id
ORDER BY insertamum DESC ORDER BY insertamum DESC
LIMIT 1 LIMIT 1
) AS status_kurzbz ) AS status_kurzbz,
anrechnungstatus.bezeichnung_mehrsprachig[' . $LANGUAGE_INDEX . '] AS "status_bezeichnung"
FROM lehre.tbl_anrechnung AS anrechnung FROM lehre.tbl_anrechnung AS anrechnung
JOIN public.tbl_prestudent USING (prestudent_id) JOIN public.tbl_prestudent USING (prestudent_id)
JOIN public.tbl_person AS person USING (person_id) JOIN public.tbl_person AS person USING (person_id)
@@ -46,25 +47,83 @@ $query = '
LEFT JOIN campus.tbl_dms_version AS dmsversion USING (dms_id) LEFT JOIN campus.tbl_dms_version AS dmsversion USING (dms_id)
JOIN lehre.tbl_anrechnung_anrechnungstatus USING (anrechnung_id) JOIN lehre.tbl_anrechnung_anrechnungstatus USING (anrechnung_id)
JOIN lehre.tbl_anrechnung_begruendung AS begruendung USING (begruendung_id) JOIN lehre.tbl_anrechnung_begruendung AS begruendung USING (begruendung_id)
) JOIN lehre.tbl_anrechnungstatus as anrechnungstatus USING (status_kurzbz)
WHERE studiensemester_kurzbz = \'' . $STUDIENSEMESTER . '\'
-- Order to distinct on last anrechnungstatus
ORDER BY anrechnung.anrechnung_id, lehre.tbl_anrechnung_anrechnungstatus.insertamum DESC
),
-- Allen Lektoren einer LV und flag, welche LV-Leitung innehaben
tbl_lvleitungen AS
(
SELECT DISTINCT ON (benutzer.uid, lehrveranstaltung_id) lehrveranstaltung_id, uid,
CASE WHEN lehrfunktion_kurzbz = \'LV-Leitung\' THEN TRUE
ELSE FALSE
END AS lvleiter
FROM lehre.tbl_lehreinheit
JOIN anrechnungen USING (lehrveranstaltung_id) -- LVs auf Anrechnungen beschränken
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 tbl_lehreinheit.studiensemester_kurzbz = \'' . $STUDIENSEMESTER . '\'
AND benutzer.aktiv = TRUE
AND tbl_person.aktiv = TRUE
ORDER BY lehrveranstaltung_id, benutzer.uid, lehrfunktion_kurzbz DESC
)';
SELECT DISTINCT ON (anrechnungen.*, lema.mitarbeiter_uid) anrechnungen.*, if ($configFachbereichsleitung === TRUE)
array_to_json(anrechnungstatus.bezeichnung_mehrsprachig::varchar[])->>' . $LANGUAGE_INDEX . ' AS "status_bezeichnung" {
FROM anrechnungen $query.= '
JOIN lehre.tbl_anrechnungstatus as anrechnungstatus ON (anrechnungstatus.status_kurzbz = anrechnungen.status_kurzbz) SELECT
JOIN lehre.tbl_lehreinheit le USING (lehrveranstaltung_id) -- immer empfehlungsberechtigt, da hier nur Leitungen der LV-OE eine Empfehlungsanfrage erhalten
JOIN lehre.tbl_lehreinheitmitarbeiter lema USING (lehreinheit_id) TRUE AS empfehlungsberechtigt,
WHERE anrechnungen.studiensemester_kurzbz = \'' . $STUDIENSEMESTER . '\' anrechnungen.*
AND le.studiensemester_kurzbz = anrechnungen.studiensemester_kurzbz FROM anrechnungen
AND lema.mitarbeiter_uid = \'' . $LEKTOR_UID . '\' JOIN lehre.tbl_lehrveranstaltung lv using (lehrveranstaltung_id)
AND le.lehre = TRUE JOIN public.tbl_organisationseinheit og using (oe_kurzbz) -- OE der LV
AND EXISTS ( JOIN public.tbl_benutzerfunktion bf using (oe_kurzbz)
SELECT 1 -- Aktive Leitung der LV-OE
FROM lehre.tbl_anrechnung_anrechnungstatus WHERE bf.funktion_kurzbz = \'Leitung\'
WHERE anrechnung_id = anrechnungen.anrechnung_id and bf.datum_von <= now()
AND status_kurzbz=\'inProgressLektor\' and (bf.datum_bis >= now() or bf.datum_bis is null)
) AND bf.uid = \'' . $LEKTOR_UID . '\'
'; -- check, dass es für diese Anrechnung eine Empfehlungsanfrage gibt
AND EXISTS (
SELECT 1
FROM lehre.tbl_anrechnung_anrechnungstatus
WHERE anrechnung_id = anrechnungen.anrechnung_id
AND status_kurzbz=\'inProgressLektor\'
)
order by empfehlung_anrechnung NULLS FIRST, antragsdatum
';
}
else
{
$query.= '
SELECT DISTINCT ON (anrechnungen.*, lema.mitarbeiter_uid)
CASE
-- erst prüfen, ob es überhaupt eine LV Leitung gibt (wenn nicht, dann immer empfehlungsberechtigt)
WHEN EXISTS (SELECT 1 FROM tbl_lvleitungen WHERE lehrveranstaltung_id = anrechnungen.lehrveranstaltung_id AND lvleiter = TRUE)
-- wenn ja, return true, wenn user LV Leitung ist oder false, wenn nicht
THEN (SELECT EXISTS (SELECT 1 FROM tbl_lvleitungen WHERE lehrveranstaltung_id = anrechnungen.lehrveranstaltung_id AND lvleiter = TRUE AND uid = \'' . $LEKTOR_UID . '\'))
-- wenn es keine LV Leitung, return immer true
ELSE TRUE
END AS empfehlungsberechtigt,
anrechnungen.*
FROM anrechnungen
JOIN lehre.tbl_lehreinheit le USING (lehrveranstaltung_id)
JOIN lehre.tbl_lehreinheitmitarbeiter lema USING (lehreinheit_id)
WHERE le.studiensemester_kurzbz = anrechnungen.studiensemester_kurzbz
AND lema.mitarbeiter_uid = \'' . $LEKTOR_UID . '\'
AND le.lehre = TRUE
-- check, dass es für diese Anrechnung eine Empfehlungsanfrage gibt
AND EXISTS (
SELECT 1
FROM lehre.tbl_anrechnung_anrechnungstatus
WHERE anrechnung_id = anrechnungen.anrechnung_id
AND status_kurzbz=\'inProgressLektor\'
)
';
}
$filterWidgetArray = array( $filterWidgetArray = array(
'query' => $query, 'query' => $query,
@@ -72,6 +131,7 @@ $filterWidgetArray = array(
'requiredPermissions' => 'lehre/anrechnung_empfehlen', 'requiredPermissions' => 'lehre/anrechnung_empfehlen',
'datasetRepresentation' => 'tabulator', 'datasetRepresentation' => 'tabulator',
'columnsAliases' => array( 'columnsAliases' => array(
'Empfehlungsberechtigt',
'anrechnung_id', 'anrechnung_id',
'lehrveranstaltung_id', 'lehrveranstaltung_id',
'begruendung_id', 'begruendung_id',
@@ -98,6 +158,7 @@ $filterWidgetArray = array(
persistentSort:true, persistentSort:true,
autoResize: false, // prevent auto resizing of table (false to allow adapting table size when cols are (de-)activated autoResize: false, // prevent auto resizing of table (false to allow adapting table size when cols are (de-)activated
headerFilterPlaceholder: " ", headerFilterPlaceholder: " ",
initialHeaderFilter: [{field:"empfehlungsberechtigt", value: true}],
index: "anrechnung_id", // assign specific column as unique id (important for row indexing) index: "anrechnung_id", // assign specific column as unique id (important for row indexing)
selectable: true, // allow row selection selectable: true, // allow row selection
selectableRangeMode: "click", // allow range selection using shift end click on end of range selectableRangeMode: "click", // allow range selection using shift end click on end of range
@@ -122,6 +183,9 @@ $filterWidgetArray = array(
} }
}', // tabulator properties }', // tabulator properties
'datasetRepFieldsDefs' => '{ 'datasetRepFieldsDefs' => '{
empfehlungsberechtigt: {formatter:"tickCross", align:"center", headerTooltip:"Berechtigt wenn man die LV leitet oder wenn der LV keine LV-Leitung zugeordnet ist.",
headerFilter:"tickCross", headerFilterParams:{"tristate": true}, headerFilterFunc: hf_empfehlungsberechtigt
},
anrechnung_id: {visible: false, headerFilter:"input"}, anrechnung_id: {visible: false, headerFilter:"input"},
lehrveranstaltung_id: {visible: false, headerFilter:"input"}, lehrveranstaltung_id: {visible: false, headerFilter:"input"},
begruendung_id: {visible: false, headerFilter:"input"}, begruendung_id: {visible: false, headerFilter:"input"},
@@ -133,7 +197,7 @@ $filterWidgetArray = array(
ects: {headerFilter:"input", align:"center"}, ects: {headerFilter:"input", align:"center"},
student: {headerFilter:"input"}, student: {headerFilter:"input"},
begruendung: {headerFilter:"input"}, begruendung: {headerFilter:"input"},
zgv: {visible: false, headerFilter:"input"}, zgv: {headerFilter:"input"},
dokument_bezeichnung: {headerFilter:"input", formatter:"link", formatterParams: paramLookup_dokBez}, dokument_bezeichnung: {headerFilter:"input", formatter:"link", formatterParams: paramLookup_dokBez},
anmerkung_student: {headerFilter:"input"}, anmerkung_student: {headerFilter:"input"},
antragsdatum: {align:"center", headerFilter:"input", mutator: mut_formatStringDate}, antragsdatum: {align:"center", headerFilter:"input", mutator: mut_formatStringDate},
@@ -7,10 +7,11 @@
$STUDIENSEMESTER = '\''.$this->variablelib->getVar('infocenter_studiensemester').'\''; $STUDIENSEMESTER = '\''.$this->variablelib->getVar('infocenter_studiensemester').'\'';
$LOGDATA_NAME = '\'Message sent\''; $LOGDATA_NAME = '\'Message sent\'';
$LOGDATA_VON = '\'online\''; $LOGDATA_VON = '\'online\'';
$STUDIENGEBUEHR_ANZAHLUNG = '\'StudiengebuehrAnzahlung\'';
$query = ' $query = '
SELECT SELECT
p.person_id AS "PersonID", p.person_id AS "PersonId",
ps.prestudent_id AS "PreStudentID", ps.prestudent_id AS "PreStudentID",
p.vorname AS "Vorname", p.vorname AS "Vorname",
p.nachname AS "Nachname", p.nachname AS "Nachname",
@@ -37,7 +38,15 @@ $query = '
AND l.zeitpunkt >= pss.insertamum AND l.zeitpunkt >= pss.insertamum
ORDER BY l.log_id DESC ORDER BY l.log_id DESC
LIMIT 1 LIMIT 1
) AS "Nachricht" ) AS "Nachricht",
(
SELECT SUM(konto.betrag)
FROM public.tbl_konto konto
LEFT JOIN tbl_konto skonto ON (skonto.buchungsnr_verweis = konto.buchungsnr)
WHERE konto.person_id = p.person_id
AND konto.studiensemester_kurzbz = '. $STUDIENSEMESTER .'
AND konto.buchungstyp_kurzbz = '. $STUDIENGEBUEHR_ANZAHLUNG .'
) AS "Kaution"
FROM FROM
public.tbl_prestudentstatus pss public.tbl_prestudentstatus pss
JOIN public.tbl_prestudent ps USING(prestudent_id) JOIN public.tbl_prestudent ps USING(prestudent_id)
@@ -60,14 +69,16 @@ $query = '
'filter_id' => $this->input->get('filter_id'), 'filter_id' => $this->input->get('filter_id'),
'requiredPermissions' => 'infocenter', 'requiredPermissions' => 'infocenter',
'datasetRepresentation' => 'tablesorter', 'datasetRepresentation' => 'tablesorter',
'checkboxes' => 'PersonId',
'columnsAliases' => array( 'columnsAliases' => array(
'PersonID', 'PersonId',
'PreStudentID', 'PreStudentID',
'Vorname', ucfirst($this->p->t('person', 'vorname')) ,
'Nachname', ucfirst($this->p->t('person', 'nachname')),
'Studiengang', ucfirst($this->p->t('lehre', 'studiengang')),
'Abgewiesen am', ucfirst($this->p->t('infocenter', 'abgewiesenam')),
'Nachricht' ucfirst($this->p->t('global', 'nachricht')),
ucfirst($this->p->t('infocenter', 'kaution'))
), ),
'formatRow' => function($datasetRaw) { 'formatRow' => function($datasetRaw) {
@@ -80,6 +91,19 @@ $query = '
$datasetRaw->{'Nachricht'} = 'Ja'; $datasetRaw->{'Nachricht'} = 'Ja';
} }
if ($datasetRaw->{'Kaution'} === null)
{
$datasetRaw->{'Kaution'} = '-';
}
else if ($datasetRaw->{'Kaution'} === '0.00')
{
$datasetRaw->{'Kaution'} = 'Bezahlt';
}
else
{
$datasetRaw->{'Kaution'} = 'Offen';
}
$datasetRaw->{'AbgewiesenAm'} = date_format(date_create($datasetRaw->{'AbgewiesenAm'}),'Y-m-d H:i'); $datasetRaw->{'AbgewiesenAm'} = date_format(date_create($datasetRaw->{'AbgewiesenAm'}),'Y-m-d H:i');
return $datasetRaw; return $datasetRaw;
} }
@@ -7,13 +7,12 @@
$STUDIENGANG_TYP = '\''.$this->variablelib->getVar('infocenter_studiensgangtyp').'\''; $STUDIENGANG_TYP = '\''.$this->variablelib->getVar('infocenter_studiensgangtyp').'\'';
$TAETIGKEIT_KURZBZ = '\'bewerbung\', \'kommunikation\''; $TAETIGKEIT_KURZBZ = '\'bewerbung\', \'kommunikation\'';
$LOGDATA_NAME = '\'Login with code\', \'Login with user\', \'Interessent rejected\', \'Attempt to register with existing mailadress\', \'Access code sent\', \'Personal data saved\''; $LOGDATA_NAME = '\'Login with code\', \'Login with user\', \'Interessent rejected\', \'Attempt to register with existing mailadress\', \'Access code sent\', \'Personal data saved\'';
$LOGDATA_NAME_PARKED = '\'Parked\''; $POSTPONE_STATUS_PARKED = '\'parked\'';
$LOGDATA_NAME_ONHOLD = '\'Onhold\'';
$LOGTYPE_KURZBZ = '\'Processstate\'';
$STATUS_KURZBZ = '\'Wartender\', \'Bewerber\', \'Aufgenommener\', \'Student\''; $STATUS_KURZBZ = '\'Wartender\', \'Bewerber\', \'Aufgenommener\', \'Student\'';
$ADDITIONAL_STG = $this->config->item('infocenter_studiengang_kz'); $ADDITIONAL_STG = $this->config->item('infocenter_studiengang_kz');
$AKTE_TYP = '\'identity\', \'zgv_bakk\''; $AKTE_TYP = '\'identity\', \'zgv_bakk\'';
$STUDIENSEMESTER = '\''.$this->variablelib->getVar('infocenter_studiensemester').'\''; $STUDIENSEMESTER = '\''.$this->variablelib->getVar('infocenter_studiensemester').'\'';
$STUDIENGEBUEHR_ANZAHLUNG = '\'StudiengebuehrAnzahlung\'';
$ORG_NAME = '\'InfoCenter\''; $ORG_NAME = '\'InfoCenter\'';
$ONLINE = '\'online\''; $ONLINE = '\'online\'';
@@ -27,8 +26,6 @@
p.staatsbuergerschaft AS "Nation", p.staatsbuergerschaft AS "Nation",
pl.zeitpunkt AS "LockDate", pl.zeitpunkt AS "LockDate",
pl.lockuser AS "LockUser", pl.lockuser AS "LockUser",
pd.parkdate AS "ParkDate",
ohd.onholddate AS "OnholdDate",
( (
SELECT l.zeitpunkt SELECT l.zeitpunkt
FROM system.tbl_log l FROM system.tbl_log l
@@ -291,7 +288,17 @@
LIMIT 1 LIMIT 1
) )
LIMIT 1 LIMIT 1
) AS "InfoCenterMitarbeiter" ) AS "InfoCenterMitarbeiter",
rueck.datum_bis AS "HoldDate",
rueck.bezeichnung AS "Rueckstellgrund",
(
SELECT SUM(konto.betrag)
FROM public.tbl_konto konto
LEFT JOIN tbl_konto skonto ON (skonto.buchungsnr_verweis = konto.buchungsnr)
WHERE konto.person_id = p.person_id
AND konto.studiensemester_kurzbz = '. $STUDIENSEMESTER .'
AND konto.buchungstyp_kurzbz = '. $STUDIENGEBUEHR_ANZAHLUNG .'
) AS "Kaution"
FROM public.tbl_person p FROM public.tbl_person p
LEFT JOIN ( LEFT JOIN (
SELECT tpl.person_id, SELECT tpl.person_id,
@@ -302,22 +309,24 @@
JOIN public.tbl_person sp ON sb.person_id = sp.person_id JOIN public.tbl_person sp ON sb.person_id = sp.person_id
WHERE tpl.app = '.$APP.' WHERE tpl.app = '.$APP.'
) pl USING(person_id) ) pl USING(person_id)
LEFT JOIN (
SELECT l.person_id,
l.zeitpunkt AS parkdate
FROM system.tbl_log l
WHERE l.logtype_kurzbz = '.$LOGTYPE_KURZBZ.'
AND l.logdata->>\'name\' = '.$LOGDATA_NAME_PARKED.'
AND l.zeitpunkt >= NOW()
) pd USING(person_id)
LEFT JOIN ( LEFT JOIN (
SELECT l.person_id, SELECT
l.zeitpunkt AS onholddate tbl_rueckstellung.person_id,
FROM system.tbl_log l tbl_rueckstellung.datum_bis,
WHERE l.logtype_kurzbz = '.$LOGTYPE_KURZBZ.' tbl_rueckstellung.status_kurzbz,
AND l.logdata->>\'name\' = '.$LOGDATA_NAME_ONHOLD.' array_to_json(bezeichnung_mehrsprachig::varchar[])->>0 as bezeichnung
AND l.zeitpunkt >= NOW() FROM public.tbl_rueckstellung
) ohd USING(person_id) JOIN public.tbl_rueckstellung_status USING(status_kurzbz)
JOIN public.tbl_person sp ON tbl_rueckstellung.person_id = sp.person_id
WHERE tbl_rueckstellung.rueckstellung_id =
(
SELECT srueck.rueckstellung_id
FROM public.tbl_rueckstellung srueck
WHERE srueck.person_id = tbl_rueckstellung.person_id
AND datum_bis >= NOW()
ORDER BY srueck.datum_bis DESC LIMIT 1
)
) rueck ON rueck.person_id = p.person_id
WHERE WHERE
EXISTS ( EXISTS (
SELECT 1 SELECT 1
@@ -344,7 +353,12 @@
AND spss.studiensemester_kurzbz = '.$STUDIENSEMESTER.' AND spss.studiensemester_kurzbz = '.$STUDIENSEMESTER.'
) )
) )
ORDER BY "LastAction" ASC'; ORDER BY CASE
WHEN rueck.status_kurzbz IS NULL THEN 1
WHEN rueck.status_kurzbz = ' .$POSTPONE_STATUS_PARKED .' THEN 2
WHEN rueck.status_kurzbz != '. $POSTPONE_STATUS_PARKED .' THEN 3
END,
rueck.datum_bis NULLS LAST, "LastAction" ASC';
$filterWidgetArray = array( $filterWidgetArray = array(
'query' => $query, 'query' => $query,
@@ -366,8 +380,6 @@
ucfirst($this->p->t('person', 'nation')), ucfirst($this->p->t('person', 'nation')),
ucfirst($this->p->t('global', 'sperrdatum')), ucfirst($this->p->t('global', 'sperrdatum')),
ucfirst($this->p->t('global', 'gesperrtVon')), ucfirst($this->p->t('global', 'gesperrtVon')),
ucfirst($this->p->t('global', 'parkdatum')),
ucfirst($this->p->t('global', 'rueckstelldatum')),
ucfirst($this->p->t('global', 'letzteAktion')), ucfirst($this->p->t('global', 'letzteAktion')),
'Aktionstyp', 'Aktionstyp',
'AnzahlAktePflicht', 'AnzahlAktePflicht',
@@ -383,7 +395,10 @@
'ZGV Nation MA', 'ZGV Nation MA',
'ZGV Gruppe BA', 'ZGV Gruppe BA',
'ZGV Gruppe MA', 'ZGV Gruppe MA',
'InfoCenter Mitarbeiter' 'InfoCenter Mitarbeiter',
ucfirst($this->p->t('infocenter', 'rueckstelldatum')),
ucfirst($this->p->t('infocenter', 'rueckstellgrund')),
ucfirst($this->p->t('infocenter', 'kaution'))
), ),
'formatRow' => function($datasetRaw) { 'formatRow' => function($datasetRaw) {
@@ -430,18 +445,13 @@
$datasetRaw->{'LockUser'} = '-'; $datasetRaw->{'LockUser'} = '-';
} }
if ($datasetRaw->{'ParkDate'} == null) if ($datasetRaw->{'HoldDate'} == null)
{ {
$datasetRaw->{'ParkDate'} = '-'; $datasetRaw->{'HoldDate'} = '-';
}
if ($datasetRaw->{'OnholdDate'} == null)
{
$datasetRaw->{'OnholdDate'} = '-';
} }
else else
{ {
$datasetRaw->{'OnholdDate'} = date_format(date_create($datasetRaw->{'OnholdDate'}), 'Y-m-d H:i'); $datasetRaw->{'HoldDate'} = date_format(date_create($datasetRaw->{'HoldDate'}), 'Y-m-d H:i');
} }
if ($datasetRaw->{'StgAbgeschickt'} == null) if ($datasetRaw->{'StgAbgeschickt'} == null)
@@ -493,6 +503,24 @@
$datasetRaw->{'InfoCenterMitarbeiter'} = 'Ja'; $datasetRaw->{'InfoCenterMitarbeiter'} = 'Ja';
} }
if ($datasetRaw->{'Rueckstellgrund'} === null)
{
$datasetRaw->{'Rueckstellgrund'} = '-';
}
if ($datasetRaw->{'Kaution'} === null)
{
$datasetRaw->{'Kaution'} = '-';
}
else if ($datasetRaw->{'Kaution'} === '0.00')
{
$datasetRaw->{'Kaution'} = 'Bezahlt';
}
else
{
$datasetRaw->{'Kaution'} = 'Offen';
}
return $datasetRaw; return $datasetRaw;
}, },
'markRow' => function($datasetRaw) { 'markRow' => function($datasetRaw) {
@@ -504,16 +532,12 @@
$mark = FilterWidget::DEFAULT_MARK_ROW_CLASS; $mark = FilterWidget::DEFAULT_MARK_ROW_CLASS;
} }
if ($datasetRaw->OnholdDate != null) if ($datasetRaw->Rueckstellgrund != null && $datasetRaw->Rueckstellgrund !== 'Parken')
{
$mark = "onhold"; $mark = "onhold";
}
// Parking has priority over locking // Parking has priority over locking
if ($datasetRaw->ParkDate != null) if ($datasetRaw->Rueckstellgrund === 'Parken')
{
$mark = "text-info"; $mark = "text-info";
}
return $mark; return $mark;
} }
@@ -24,42 +24,15 @@
'public/js/tablesort/tablesort.js', 'public/js/tablesort/tablesort.js',
'public/js/infocenter/messageList.js', 'public/js/infocenter/messageList.js',
'public/js/infocenter/infocenterDetails.js', 'public/js/infocenter/infocenterDetails.js',
'public/js/infocenter/rueckstellung.js',
'public/js/infocenter/zgvUeberpruefung.js', 'public/js/infocenter/zgvUeberpruefung.js',
'public/js/infocenter/docUeberpruefung.js', 'public/js/infocenter/docUeberpruefung.js',
'public/js/infocenter/stammdaten.js' 'public/js/infocenter/stammdaten.js'
), ),
'phrases' => array( 'phrases' => array(
'infocenter' => array( 'infocenter',
'notizHinzufuegen', 'ui',
'notizAendern', 'global'
'bewerberParken',
'bewerberAusparken',
'nichtsZumAusparken',
'fehlerBeimAusparken',
'fehlerBeimParken',
'bewerberGeparktBis',
'bewerberOnHold',
'bewerberOnHoldEntfernen',
'bewerberOnHoldBis',
'nichtsZumEntfernen',
'fehlerBeimEntfernen',
'rueckstelldatumUeberschritten',
'parkenZurueckstellenInfo',
'zgvInPruefung',
'zgvErfuellt',
'zgvNichtErfuellt',
'zgvErfuelltPruefung',
'datumUngueltig',
'nachreichDatumNichtVergangenheit'
),
'ui' => array(
'gespeichert',
'fehlerBeimSpeichern'
),
'global' => array(
'bis',
'zeilen'
)
) )
); );
@@ -13,6 +13,7 @@
$ORG_NAME = '\'InfoCenter\''; $ORG_NAME = '\'InfoCenter\'';
$IDENTITY = '\'identity\''; $IDENTITY = '\'identity\'';
$ONLINE = '\'online\''; $ONLINE = '\'online\'';
$STUDIENGEBUEHR_ANZAHLUNG = '\'StudiengebuehrAnzahlung\'';
$query = ' $query = '
SELECT SELECT
@@ -264,7 +265,15 @@ $query = '
WHERE akte.person_id = p.person_id WHERE akte.person_id = p.person_id
AND dokument_kurzbz = '. $IDENTITY .' AND dokument_kurzbz = '. $IDENTITY .'
LIMIT 1 LIMIT 1
) AS "AktenId" ) AS "AktenId",
(
SELECT SUM(konto.betrag)
FROM public.tbl_konto konto
LEFT JOIN tbl_konto skonto ON (skonto.buchungsnr_verweis = konto.buchungsnr)
WHERE konto.person_id = p.person_id
AND konto.studiensemester_kurzbz = '. $STUDIENSEMESTER .'
AND konto.buchungstyp_kurzbz = '. $STUDIENGEBUEHR_ANZAHLUNG .'
) AS "Kaution"
FROM public.tbl_person p FROM public.tbl_person p
LEFT JOIN ( LEFT JOIN (
SELECT tpl.person_id, SELECT tpl.person_id,
@@ -337,7 +346,8 @@ $query = '
'ZGV Nation BA', 'ZGV Nation BA',
'ZGV Nation MA', 'ZGV Nation MA',
'InfoCenter Mitarbeiter', 'InfoCenter Mitarbeiter',
'Identitätsnachweis' 'Identitätsnachweis',
ucfirst($this->p->t('infocenter', 'kaution'))
), ),
'formatRow' => function($datasetRaw) { 'formatRow' => function($datasetRaw) {
@@ -453,6 +463,18 @@ $query = '
$datasetRaw->{'AktenId'} = '-'; $datasetRaw->{'AktenId'} = '-';
} }
if ($datasetRaw->{'Kaution'} === null)
{
$datasetRaw->{'Kaution'} = '-';
}
else if ($datasetRaw->{'Kaution'} === '0.00')
{
$datasetRaw->{'Kaution'} = 'Bezahlt';
}
else
{
$datasetRaw->{'Kaution'} = 'Offen';
}
return $datasetRaw; return $datasetRaw;
}, },
@@ -9,6 +9,7 @@
$ADDITIONAL_STG = $this->config->item('infocenter_studiengang_kz'); $ADDITIONAL_STG = $this->config->item('infocenter_studiengang_kz');
$STUDIENSEMESTER = '\''.$this->variablelib->getVar('infocenter_studiensemester').'\''; $STUDIENSEMESTER = '\''.$this->variablelib->getVar('infocenter_studiensemester').'\'';
$ORG_NAME = '\'InfoCenter\''; $ORG_NAME = '\'InfoCenter\'';
$STUDIENGEBUEHR_ANZAHLUNG = '\'StudiengebuehrAnzahlung\'';
$query = ' $query = '
SELECT SELECT
@@ -195,7 +196,14 @@ $query = '
LIMIT 1 LIMIT 1
) )
LIMIT 1 LIMIT 1
) AS "InfoCenterMitarbeiter" ) AS "InfoCenterMitarbeiter",
(
SELECT SUM(konto.betrag)
FROM public.tbl_konto konto
WHERE konto.person_id = p.person_id
AND konto.studiensemester_kurzbz = '. $STUDIENSEMESTER .'
AND konto.buchungstyp_kurzbz = '. $STUDIENGEBUEHR_ANZAHLUNG .'
) AS "Kaution"
FROM public.tbl_person p FROM public.tbl_person p
LEFT JOIN ( LEFT JOIN (
SELECT tpl.person_id, SELECT tpl.person_id,
@@ -256,7 +264,8 @@ $query = '
'Reihungstest Datum', 'Reihungstest Datum',
'ZGV Nation BA', 'ZGV Nation BA',
'ZGV Nation MA', 'ZGV Nation MA',
'InfoCenter Mitarbeiter' 'InfoCenter Mitarbeiter',
ucfirst($this->p->t('infocenter', 'kaution'))
), ),
'formatRow' => function($datasetRaw) { 'formatRow' => function($datasetRaw) {
@@ -359,6 +368,19 @@ $query = '
$datasetRaw->{'InfoCenterMitarbeiter'} = 'Ja'; $datasetRaw->{'InfoCenterMitarbeiter'} = 'Ja';
} }
if ($datasetRaw->{'Kaution'} === null)
{
$datasetRaw->{'Kaution'} = '-';
}
else if ($datasetRaw->{'Kaution'} === '0.00')
{
$datasetRaw->{'Kaution'} = 'Bezahlt';
}
else
{
$datasetRaw->{'Kaution'} = 'Offen';
}
return $datasetRaw; return $datasetRaw;
}, },
'markRow' => function($datasetRaw) { 'markRow' => function($datasetRaw) {
@@ -26,6 +26,7 @@
'public/js/tablesort/tablesort.js', 'public/js/tablesort/tablesort.js',
'public/js/infocenter/messageList.js', 'public/js/infocenter/messageList.js',
'public/js/infocenter/infocenterDetails.js', 'public/js/infocenter/infocenterDetails.js',
'public/js/infocenter/rueckstellung.js',
'public/js/infocenter/zgvUeberpruefung.js' 'public/js/infocenter/zgvUeberpruefung.js'
), ),
'phrases' => array( 'phrases' => array(
@@ -5,6 +5,7 @@ $INTERESSENT_STATUS = '\'Interessent\'';
$TAETIGKEIT_KURZBZ = '\'bewerbung\', \'kommunikation\''; $TAETIGKEIT_KURZBZ = '\'bewerbung\', \'kommunikation\'';
$LOGDATA_NAME = '\'Login with code\', \'Login with user\', \'New application\''; $LOGDATA_NAME = '\'Login with code\', \'Login with user\', \'New application\'';
$oeKurz = '\''. implode('\',\'', $oeKurz) . '\''; $oeKurz = '\''. implode('\',\'', $oeKurz) . '\'';
$ABGEWIESENER_STATUS = '\'Abgewiesener\'';
$query = ' $query = '
SELECT SELECT
@@ -22,6 +23,7 @@ $query = '
AND zgvstatus.datum IN ( AND zgvstatus.datum IN (
SELECT MAX(zgvstatus.datum) SELECT MAX(zgvstatus.datum)
FROM public.tbl_zgvpruefungstatus_status zgvstatus GROUP BY zgvstatus.zgvpruefung_id) FROM public.tbl_zgvpruefungstatus_status zgvstatus GROUP BY zgvstatus.zgvpruefung_id)
AND get_rolle_prestudent(prestudent_id, NULL) != '. $ABGEWIESENER_STATUS .'
ORDER BY ps.prestudent_id ORDER BY ps.prestudent_id
'; ';
+59 -6
View File
@@ -37,6 +37,7 @@ require_once('../../../include/phrasen.class.php');
require_once('../../../include/projektarbeit.class.php'); require_once('../../../include/projektarbeit.class.php');
require_once('../../../include/projektbetreuer.class.php'); require_once('../../../include/projektbetreuer.class.php');
require_once('../../../include/sancho.inc.php'); require_once('../../../include/sancho.inc.php');
require_once('../../../application/libraries/SignatureLib.php');
if (!$db = new basis_db()) if (!$db = new basis_db())
$db=false; $db=false;
@@ -590,7 +591,9 @@ while ($row=@$db->db_fetch_object($result))
$htmlstr .= "<input type='hidden' name='betreuerart' value='".$betreuerart."'>\n"; $htmlstr .= "<input type='hidden' name='betreuerart' value='".$betreuerart."'>\n";
$htmlstr .= "<input type='hidden' name='command' value='update'>\n"; $htmlstr .= "<input type='hidden' name='command' value='update'>\n";
$htmlstr .= "<tr id='".$row->projektarbeit_id."'>\n"; $htmlstr .= "<tr id='".$row->projektarbeit_id."'>\n";
if(!$row->abgabedatum)
$uploadedDocumentSigned = null;
if (!$row->abgabedatum)
{ {
if ($row->datum<date('Y-m-d')) if ($row->datum<date('Y-m-d'))
{ {
@@ -626,8 +629,7 @@ while ($row=@$db->db_fetch_object($result))
$fcol='#000000'; $fcol='#000000';
} }
} }
//$htmlstr .= "<td><input type='checkbox' name='fixtermin' ".($row->fixtermin=='t'?'checked=\"checked\"':'')." >";
//$htmlstr .= "<td><input type='checkbox' name='fixtermin' ".($row->fixtermin=='t'?'checked="checked" style="background-color:#FF0000;"':'')." disabled>";
if($row->fixtermin=='t') if($row->fixtermin=='t')
{ {
$htmlstr .= "<td><img src='../../../skin/images/bullet_red.png' alt='J' title='".$p->t('abgabetool/fixerAbgabetermin')."' border=0></td>"; $htmlstr .= "<td><img src='../../../skin/images/bullet_red.png' alt='J' title='".$p->t('abgabetool/fixerAbgabetermin')."' border=0></td>";
@@ -659,11 +661,12 @@ while ($row=@$db->db_fetch_object($result))
$htmlstr .= " </select></td>\n"; $htmlstr .= " </select></td>\n";
$htmlstr .= " <td><input type='text' name='kurzbz' value='".htmlspecialchars($row->kurzbz,ENT_QUOTES)."' size='60' maxlegth='256'></td>\n"; $htmlstr .= " <td><input type='text' name='kurzbz' value='".htmlspecialchars($row->kurzbz,ENT_QUOTES)."' size='60' maxlegth='256'></td>\n";
$htmlstr .= " <td>".($row->abgabedatum==''?'&nbsp;':$datum_obj->formatDatum($row->abgabedatum,'d.m.Y'))."</td>\n"; $htmlstr .= " <td>".($row->abgabedatum==''?'&nbsp;':$datum_obj->formatDatum($row->abgabedatum,'d.m.Y'))."</td>\n";
if($user==$row->insertvon && $betreuerart!="Zweitbegutachter")
if ($user==$row->insertvon && $betreuerart!="Zweitbegutachter")
{ {
$htmlstr .= " <td><input type='submit' name='schick' value='".$p->t('global/speichern')."' title='".$p->t('abgabetool/terminaenderungSpeichern')."'></td>"; $htmlstr .= " <td><input type='submit' name='schick' value='".$p->t('global/speichern')."' title='".$p->t('abgabetool/terminaenderungSpeichern')."'></td>";
if(!$row->abgabedatum) if (!$row->abgabedatum)
{ {
$htmlstr .= " <td><input type='submit' name='del' value='".$p->t('global/loeschen')."' onclick='return confdel()' title='".$p->t('abgabetool/terminLoeschen')."'></td>"; $htmlstr .= " <td><input type='submit' name='del' value='".$p->t('global/loeschen')."' onclick='return confdel()' title='".$p->t('abgabetool/terminLoeschen')."'></td>";
} }
@@ -692,6 +695,56 @@ while ($row=@$db->db_fetch_object($result))
{ {
$htmlstr .= " <td>&nbsp;&nbsp;&nbsp;&nbsp;</td>"; $htmlstr .= " <td>&nbsp;&nbsp;&nbsp;&nbsp;</td>";
} }
if (file_exists(PAABGABE_PATH.$row->paabgabe_id.'_'.$uid.'.pdf'))
{
$signaturVorhanden = false;
if ($row->paabgabetyp_kurzbz == 'end')
{
if(defined('ABGABETOOL_CHECK_SIGNATURE') && ABGABETOOL_CHECK_SIGNATURE)
{
// Check if the document is signed
$signList = SignatureLib::list(PAABGABE_PATH.$row->paabgabe_id.'_'.$uid.'.pdf');
if (is_array($signList) && count($signList) > 0)
{
$signaturVorhanden = true;
// The document is signed
}
elseif ($signList === null)
{
$uploadedDocumentSigned = 'WARNING: signature server error';
}
else
{
$uploadedDocumentSigned = $p->t('abgabetool/uploadedDocumentNotSigned');
}
}
}
if ($uploadedDocumentSigned != null)
{
$htmlstr .= '
<td>
<div style="color: #8a6d3b; background-color: #fcf8e3; border-color: #faebcc; padding: 5px; border: 1px solid; border-radius: 4px; ">
<b>'.$uploadedDocumentSigned.'</b>
</div>
</td>';
}
elseif($signaturVorhanden)
{
$htmlstr .= '
<td>
<div style="color: #198754; background-color: #d1e7dd; border-color: #a3cfbb; padding: 5px; border: 1px solid; border-radius: 4px; ">
<b>'.$p->t('abgabetool/uploadedDocumentSigned').'</b>
</div>
</td>';
}
}
else
{
$htmlstr .= " <td>&nbsp;&nbsp;&nbsp;&nbsp;</td>";
}
$htmlstr .= " </tr>\n"; $htmlstr .= " </tr>\n";
@@ -710,7 +763,7 @@ $htmlstr .= '<tr id="'.$db->convert_html_chars($projektarbeit_id).'">'."\n";
//$htmlstr .= "<td><input type='checkbox' name='fixtermin'></td>"; //$htmlstr .= "<td><input type='checkbox' name='fixtermin'></td>";
$htmlstr .= "<td>&nbsp;&nbsp;</td>"; $htmlstr .= "<td>&nbsp;&nbsp;</td>";
$htmlstr .= " <td><input type='text' name='datum' size='10' maxlegth='10' style='font-weight:bold;' ></td>\n"; $htmlstr .= " <td><input type='text' name='datum' size='10' maxlegth='10' style='font-weight:bold;' ></td>\n";
$htmlstr .= " <td><select name='paabgabetyp_kurzbz'>\n"; $htmlstr .= " <td><select name='paabgabetyp_kurzbz'>\n";
$qry_typ = "SELECT * FROM campus.tbl_paabgabetyp WHERE paabgabetyp_kurzbz!='end' AND paabgabetyp_kurzbz!='enda' AND paabgabetyp_kurzbz!='note'"; $qry_typ = "SELECT * FROM campus.tbl_paabgabetyp WHERE paabgabetyp_kurzbz!='end' AND paabgabetyp_kurzbz!='enda' AND paabgabetyp_kurzbz!='note'";
+76 -6
View File
@@ -36,6 +36,7 @@ require_once('../../../include/phrasen.class.php');
require_once('../../../include/projektarbeit.class.php'); require_once('../../../include/projektarbeit.class.php');
require_once('../../../include/projektbetreuer.class.php'); require_once('../../../include/projektbetreuer.class.php');
require_once('../../../include/sancho.inc.php'); require_once('../../../include/sancho.inc.php');
require_once('../../../application/libraries/SignatureLib.php');
$anzeigesprache = getSprache(); $anzeigesprache = getSprache();
$p = new phrasen($anzeigesprache); $p = new phrasen($anzeigesprache);
@@ -93,6 +94,7 @@ else
$abstract = (isset($_POST['abstract'])?$_POST['abstract']:'-1'); $abstract = (isset($_POST['abstract'])?$_POST['abstract']:'-1');
$abstract_en = (isset($_POST['abstract_en'])?$_POST['abstract_en']:'-1'); $abstract_en = (isset($_POST['abstract_en'])?$_POST['abstract_en']:'-1');
$seitenanzahl = (isset($_POST['seitenanzahl'])?$_POST['seitenanzahl']:'-1'); $seitenanzahl = (isset($_POST['seitenanzahl'])?$_POST['seitenanzahl']:'-1');
$signaturVorhanden = (isset($_POST['signaturVorhanden']) && $_POST['signaturVorhanden']=='true'?true:false);
} }
$user = get_uid(); $user = get_uid();
@@ -111,6 +113,7 @@ $titel = $projektarbeit_obj->titel;
$person = new person(); $person = new person();
$person->load($bid); $person->load($bid);
$betreuer = $person->titelpre.' '.$person->vorname.' '.$person->nachname.' '.$person->titelpost; $betreuer = $person->titelpre.' '.$person->vorname.' '.$person->nachname.' '.$person->titelpost;
$uploadedDocumentSigned = null;
if($uid!=$user) if($uid!=$user)
{ {
@@ -258,6 +261,35 @@ if($command=='add')
echo "<font color=\"#FF0000\">".$p->t('global/fehleraufgetreten')."</font><br>&nbsp;"; echo "<font color=\"#FF0000\">".$p->t('global/fehleraufgetreten')."</font><br>&nbsp;";
$command=''; $command='';
} }
if ($signaturVorhanden === false)
{
// Mail an Studiengang wenn keine Signatur gefunden wurde
$student = new student();
if(!$student->load($projektarbeit_obj->student_uid))
die($p->t('global/userNichtGefunden'));
$stg_obj = new studiengang();
if(!$stg_obj->load($student->studiengang_kz))
die($p->t('global/fehlerBeimLesenAusDatenbank'));
$subject = 'Abgabe ohne Signatur';
$tomail = $stg_obj->email;
$data = array(
'vorname' => $student->vorname,
'nachname' => $student->nachname,
'studiengang' => $stg_obj->bezeichnung
);
$mailres = sendSanchoMail(
'ParbeitsbeurteilungSiganturFehlt',
$data,
$tomail,
$subject,
'sancho_header_min_bw.jpg',
'sancho_footer_min_bw.jpg'
);
}
} }
else else
{ {
@@ -280,11 +312,11 @@ if($command=="update" && $error!=true)
$extensions = explode(".", $_FILES['datei']['name']); $extensions = explode(".", $_FILES['datei']['name']);
if(strtoupper(end($extensions))=='PDF') if(strtoupper(end($extensions))=='PDF')
{ {
if($paabgabetyp_kurzbz!='end') if ($paabgabetyp_kurzbz != 'end')
{ {
//"normaler" Upload //"normaler" Upload
move_uploaded_file($_FILES['datei']['tmp_name'], PAABGABE_PATH.$paabgabe_id.'_'.$uid.'.pdf'); move_uploaded_file($_FILES['datei']['tmp_name'], PAABGABE_PATH.$paabgabe_id.'_'.$uid.'.pdf');
if(file_exists(PAABGABE_PATH.$paabgabe_id.'_'.$uid.'.pdf')) if (file_exists(PAABGABE_PATH.$paabgabe_id.'_'.$uid.'.pdf'))
{ {
exec('chmod 640 "'.PAABGABE_PATH.$paabgabe_id.'_'.$uid.'.pdf'.'"'); exec('chmod 640 "'.PAABGABE_PATH.$paabgabe_id.'_'.$uid.'.pdf'.'"');
@@ -299,18 +331,40 @@ if($command=="update" && $error!=true)
else else
{ {
echo $p->t('global/dateiNichtErfolgreichHochgeladen'); echo $p->t('global/dateiNichtErfolgreichHochgeladen');
} }$htmlstr .= '<input type="hidden" name="command" value="add">'."\n";
} }
else else // endupload type
{ {
//Upload der Endabgabe - Eingabe der Zusatzdaten //Upload der Endabgabe - Eingabe der Zusatzdaten
$command='add'; $command='add';
if(!$error) if (!$error)
{ {
move_uploaded_file($_FILES['datei']['tmp_name'], PAABGABE_PATH.$paabgabe_id.'_'.$uid.'.pdf'); move_uploaded_file($_FILES['datei']['tmp_name'], PAABGABE_PATH.$paabgabe_id.'_'.$uid.'.pdf');
} }
if(file_exists(PAABGABE_PATH.$paabgabe_id.'_'.$uid.'.pdf'))
$signaturVorhanden = true;
if (file_exists(PAABGABE_PATH.$paabgabe_id.'_'.$uid.'.pdf'))
{ {
if(defined('ABGABETOOL_CHECK_SIGNATURE') && ABGABETOOL_CHECK_SIGNATURE)
{
// Check if the document is signed
$signList = SignatureLib::list(PAABGABE_PATH.$paabgabe_id.'_'.$uid.'.pdf');
if (is_array($signList) && count($signList) > 0)
{
// The document is signed
}
elseif ($signList === null)
{
$uploadedDocumentSigned = 'WARNING: signature server error';
}
else
{
$signaturVorhanden = false;
$uploadedDocumentSigned = $p->t('abgabetool/uploadedDocumentNotSignedStudent');
}
}
/*$qry="UPDATE campus.tbl_paabgabe SET /*$qry="UPDATE campus.tbl_paabgabe SET
abgabedatum = now(), abgabedatum = now(),
updatevon = '".$user."', updatevon = '".$user."',
@@ -339,6 +393,7 @@ if($command=="update" && $error!=true)
$htmlstr .= '<input type="hidden" name="betreuer" value="'.$db->convert_html_chars($betreuer).'">'."\n"; $htmlstr .= '<input type="hidden" name="betreuer" value="'.$db->convert_html_chars($betreuer).'">'."\n";
$htmlstr .= '<input type="hidden" name="bid" value="'.$db->convert_html_chars($bid).'">'."\n"; $htmlstr .= '<input type="hidden" name="bid" value="'.$db->convert_html_chars($bid).'">'."\n";
$htmlstr .= '<input type="hidden" name="command" value="add">'."\n"; $htmlstr .= '<input type="hidden" name="command" value="add">'."\n";
$htmlstr .= '<input type="hidden" name="signaturVorhanden" value="'.($signaturVorhanden?'true':'false').'">'."\n";
$htmlstr .= "<tr>\n"; $htmlstr .= "<tr>\n";
$htmlstr .= "<td><b>".$p->t('abgabetool/spracheDerArbeit').":</b></td><td>"; $htmlstr .= "<td><b>".$p->t('abgabetool/spracheDerArbeit').":</b></td><td>";
$sprache = @$db->db_query("SELECT sprache FROM public.tbl_sprache"); $sprache = @$db->db_query("SELECT sprache FROM public.tbl_sprache");
@@ -372,6 +427,21 @@ if($command=="update" && $error!=true)
$htmlstr .= '<tr><td><b>'.$p->t('abgabetool/seitenanzahl').':*</b></td> $htmlstr .= '<tr><td><b>'.$p->t('abgabetool/seitenanzahl').':*</b></td>
<td><input type="text" name="seitenanzahl" value="'.$db->convert_html_chars($seitenanzahl).'" size="5" maxlength="4"></td></tr>'."\n"; <td><input type="text" name="seitenanzahl" value="'.$db->convert_html_chars($seitenanzahl).'" size="5" maxlength="4"></td></tr>'."\n";
$htmlstr .="<tr><td>&nbsp;</td></tr>\n"; $htmlstr .="<tr><td>&nbsp;</td></tr>\n";
// If there are info about the signed document
if ($uploadedDocumentSigned != null)
{
$htmlstr .= "<tr>\n";
$htmlstr .= "<td colspan='2' style='text-align: center;'>";
$htmlstr .= '<div style="color: #8a6d3b; background-color: #fcf8e3; border-color: #faebcc; padding: 15px; border: 1px solid; border-radius: 4px;">
<b>'.$uploadedDocumentSigned.'</b></td>
</div>';
$htmlstr .= "</td>";
$htmlstr .= "</tr>\n";
}
$htmlstr .="<tr><td>&nbsp;</td></tr>\n";
$htmlstr .="<tr><td colspan='2'><p align='justify'>".$p->t('abgabetool/eidesstattlicheErklaerung')."</p></td><td></td></tr>\n"; $htmlstr .="<tr><td colspan='2'><p align='justify'>".$p->t('abgabetool/eidesstattlicheErklaerung')."</p></td><td></td></tr>\n";
$htmlstr .= "<tr><td><b>".$p->t('abgabetool/gelesenUndAkzeptiert').":* <input type='checkbox' name='eiderklaerung'></b></td></tr>"; $htmlstr .= "<tr><td><b>".$p->t('abgabetool/gelesenUndAkzeptiert').":* <input type='checkbox' name='eiderklaerung'></b></td></tr>";
$htmlstr .="<tr></tr><td>&nbsp;</td><tr><td style='font-size:70%'>* ".$p->t('abgabetool/pflichtfeld')."</td></tr> $htmlstr .="<tr></tr><td>&nbsp;</td><tr><td style='font-size:70%'>* ".$p->t('abgabetool/pflichtfeld')."</td></tr>
+2 -1
View File
@@ -353,7 +353,8 @@ function writePruefungsTable(e, data, anmeldung)
var time = termin[1].substring(0,5); var time = termin[1].substring(0,5);
termin = termin[0].split("-"); termin = termin[0].split("-");
// Studierende dürfen sich 2 Monate vor Prüfungen anmelden // Studierende dürfen sich 2 Monate vor Prüfungen anmelden
var minimumFrist = new Date(termin[0], termin[1]-1,termin[2]); var minimumFrist = new Date(termin[0], termin[1]-1,termin[2]);
minimumFrist.setMonth(minimumFrist.getMonth() - 2); minimumFrist.setMonth(minimumFrist.getMonth() - 2);
+4 -4
View File
@@ -866,12 +866,12 @@ if (isset($_GET['resend']))
echo '<br><br><div class="alert alert-info" style="width: 800px"> echo '<br><br><div class="alert alert-info" style="width: 800px">
<span class="glyphicon glyphicon-info-sign"></span> <span class="glyphicon glyphicon-info-sign"></span>
Sie können ihre vorläufigen Terminzusagen in ihr Kalendersystem einbinden.<br> Sie können ihre vorläufigen Terminzusagen in ihr Kalendersystem einbinden.<br>
Importieren Sie dazu die .ics-Datei aus folgendem Link in ihren Kalender:<br> Importieren Sie dazu die .ics-Datei des folgenden Links in ihren Kalender:<br>
<a href="'.APP_ROOT.'cis/public/ical_coodle.php/'.$uid.'" target="_blank"> <a href="'.APP_ROOT.'cis/public/ical_coodle.php/cipher_encryption/'.encryptData($uid,LVPLAN_CYPHER_KEY).'" target="_blank">
'.APP_ROOT.'cis/public/ical_coodle.php/'.$uid.' '.APP_ROOT.'cis/public/ical_coodle.php/cipher_encryption/'.encryptData($uid,LVPLAN_CYPHER_KEY).'
</a> </a>
<br><br> <br><br>
Die Datei enthält ihre Terminzusagen aus <u>allen laufenden Umfragen</u> in anonymisierter Form. Die Datei enthält ihre Terminzusagen aus <b>allen laufenden Umfragen</b> .
</div>'; </div>';
} }
+30 -4
View File
@@ -28,13 +28,27 @@ require_once('../../include/functions.inc.php');
require_once('../../include/coodle.class.php'); require_once('../../include/coodle.class.php');
require_once('../../include/ical.class.php'); require_once('../../include/ical.class.php');
$uid = mb_substr($_SERVER['PATH_INFO'],1);
$params = mb_substr($_SERVER['PATH_INFO'],1);
$paramsArray = explode('/',$params);
$private = false;
if ($paramsArray[0] == 'cipher_encryption')
{
$uid = decryptData($paramsArray[1],LVPLAN_CYPHER_KEY);
$private = true;
}
else
{
$uid = $paramsArray[0];
}
$bn = new benutzer(); $bn = new benutzer();
if(!$bn->load($uid)) if(!$bn->load($uid))
die('User invalid'); die('User invalid');
header("Content-Type: text/calendar; charset=UTF-8"); header("Content-Type: text/calendar; charset=UTF-8");
header("Content-disposition: filename=Coodle Terminzusagen.ics");
echo "BEGIN:VCALENDAR\n"; echo "BEGIN:VCALENDAR\n";
echo "VERSION:2.0\n"; echo "VERSION:2.0\n";
@@ -80,7 +94,7 @@ foreach($umfragen->result as $umfrage)
if($ressource_id = $ressource->RessourceExists($umfrage->coodle_id, $uid)) if($ressource_id = $ressource->RessourceExists($umfrage->coodle_id, $uid))
{ {
// Terminvorschlaege laden die angekreuzt wurden // Terminvorschlaege laden die angekreuzt wurden
$termine = new coodle(); $termine = new coodle($umfrage->coodle_id);
$termine->getRessourceTermin($umfrage->coodle_id, $ressource_id); $termine->getRessourceTermin($umfrage->coodle_id, $ressource_id);
foreach($termine->result as $termin) foreach($termine->result as $termin)
{ {
@@ -91,10 +105,22 @@ foreach($umfragen->result as $umfrage)
$date->add($interval); $date->add($interval);
$uhrzeit_ende = $date->format('H:i:s'); $uhrzeit_ende = $date->format('H:i:s');
$dtende = $date->format('Ymd\THis'); $dtende = $date->format('Ymd\THis');
$ersteller = new benutzer($termine->ersteller_uid);
if ($private == true)
{
$summary = 'Coodle Terminoption '.strip_tags($termine->titel);
$description = 'Erstellt von '.$ersteller->vorname.' '.$ersteller->nachname;
}
else
{
$summary = 'Coodle Terminoption';
$description = '';
}
echo "\nBEGIN:VEVENT"; echo "\nBEGIN:VEVENT";
echo "\nUID:Coodle_Terminoption".$dtstart."_".$dtende.""; echo "\nUID:Coodle_Terminoption".$dtstart."_".$dtende;
echo "\nSUMMARY:Coodle Terminoption"; echo "\nSUMMARY:".$summary;
echo "\nDESCRIPTION:".$description;
echo "\nDTSTART;TZID=Europe/Vienna:$dtstart"; echo "\nDTSTART;TZID=Europe/Vienna:$dtstart";
echo "\nDTEND;TZID=Europe/Vienna:$dtende"; echo "\nDTEND;TZID=Europe/Vienna:$dtende";
echo "\nTRANSP:OPAQUE"; echo "\nTRANSP:OPAQUE";
+20
View File
@@ -207,6 +207,26 @@ define('TABLE_ID','_id');
define('TABLE_BEGIN','tbl_'); define('TABLE_BEGIN','tbl_');
define('VIEW_BEGIN','vw_'); define('VIEW_BEGIN','vw_');
/**
* Signatur
* DEFAULT: https://signatur.example.com/api/sign
*/
// Generic URL
define('SIGNATUR_URL', 'https://signatur.dev.technikum-wien.at/api');
// Sign API
define('SIGNATUR_SIGN_API', 'sign');
// List API
define('SIGNATUR_LIST_API', 'list');
// User für Zugriff auf Signaturserver
define('SIGNATUR_USER', 'fhcomplete');
// Passwort für Zugriff auf Signaturserver
define('SIGNATUR_PASSWORD', 'supersecretpassword');
// Signaturprofil das verwendet werden soll
define('SIGNATUR_DEFAULT_PROFILE', 'FHC_AMT_GROSS_DE');
// Signaturpruefung im Abgabetool aktivieren
define('ABGABETOOL_CHECK_SIGNATURE',false);
//Gibt an, ob das Studienbuchblatt im CIS gedruckt werden kann //Gibt an, ob das Studienbuchblatt im CIS gedruckt werden kann
define('CIS_DOKUMENTE_STUDIENBUCHLBATT_DRUCKEN',true); define('CIS_DOKUMENTE_STUDIENBUCHLBATT_DRUCKEN',true);
+11 -3
View File
@@ -188,14 +188,22 @@ define('FHC_REST_PASSWORD', 'password');
* Signatur * Signatur
* DEFAULT: https://signatur.example.com/api/sign * DEFAULT: https://signatur.example.com/api/sign
*/ */
define('SIGNATUR_URL', 'https://signatur.example.com/api/sign'); // Generic URL
define('SIGNATUR_URL', 'https://signatur.dev.technikum-wien.at/api');
// Sign API
define('SIGNATUR_SIGN_API', 'sign');
// List API
define('SIGNATUR_LIST_API', 'list');
// User für Zugriff auf Signaturserver // User für Zugriff auf Signaturserver
define('SIGNATUR_USER', 'username'); define('SIGNATUR_USER', 'fhcomplete');
// Passwort für Zugriff auf Signaturserver // Passwort für Zugriff auf Signaturserver
define('SIGNATUR_PASSWORD', 'password'); define('SIGNATUR_PASSWORD', 'supersecretpassword');
// Signaturprofil das verwendet werden soll // Signaturprofil das verwendet werden soll
define('SIGNATUR_DEFAULT_PROFILE', 'FHC_AMT_GROSS_DE'); define('SIGNATUR_DEFAULT_PROFILE', 'FHC_AMT_GROSS_DE');
// Signaturpruefung im Abgabetool aktivieren
define('ABGABETOOL_CHECK_SIGNATURE',false);
/** /**
* Datenverbund Anbindung * Datenverbund Anbindung
*/ */
@@ -783,6 +783,22 @@ echo '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>';
class="sortDirectionIndicator" class="sortDirectionIndicator"
sort="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#statusgrund" /> sort="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#statusgrund" />
<splitter class="tree-splitter"/> <splitter class="tree-splitter"/>
<treecol id="student-prestudent-tree-rolle-statusgrund" label="Insertamum" flex="1" hidden="true" persist="hidden, width, ordinal"
class="sortDirectionIndicator"
sort="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#insertamum" />
<splitter class="tree-splitter"/>
<treecol id="student-prestudent-tree-rolle-insertvon" label="Insertvon" flex="1" hidden="true" persist="hidden, width, ordinal"
class="sortDirectionIndicator"
sort="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#insertvon" />
<splitter class="tree-splitter"/>
<treecol id="student-prestudent-tree-rolle-updateamum" label="Updateamum" flex="1" hidden="true" persist="hidden, width, ordinal"
class="sortDirectionIndicator"
sort="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#updateamum" />
<splitter class="tree-splitter"/>
<treecol id="student-prestudent-tree-rolle-updatevon" label="Updatevon" flex="1" hidden="true" persist="hidden, width, ordinal"
class="sortDirectionIndicator"
sort="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#updatevon" />
<splitter class="tree-splitter"/>
</treecols> </treecols>
<template> <template>
@@ -804,6 +820,10 @@ echo '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>';
<treecell label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#bestaetigt_am"/> <treecell label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#bestaetigt_am"/>
<treecell label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#bewerbung_abgeschicktamum"/> <treecell label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#bewerbung_abgeschicktamum"/>
<treecell label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#statusgrund"/> <treecell label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#statusgrund"/>
<treecell label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#insertamum"/>
<treecell label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#insertvon"/>
<treecell label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#updateamum"/>
<treecell label="rdf:http://www.technikum-wien.at/prestudentrolle/rdf#updatevon"/>
</treerow> </treerow>
</treeitem> </treeitem>
</treechildren> </treechildren>
+15 -3
View File
@@ -2191,14 +2191,26 @@ function StudentRolleSpeichern(dialog, studiensemester_old, ausbildungssemester_
// Convert bewerbung_abgeschicktamum to ISO-Date // Convert bewerbung_abgeschicktamum to ISO-Date
if(bewerbung_abgeschicktamum != '') if(bewerbung_abgeschicktamum != '')
{ {
if(bewerbung_abgeschicktamum.length != 19) if(bewerbung_abgeschicktamum.length < 10)
{ {
bewerbung_abgeschicktamum = ''; alert('Abgeschicktdatum ist ungueltig');
return false;
} }
else else
{ {
datepart = bewerbung_abgeschicktamum.substring(0, 10); datepart = bewerbung_abgeschicktamum.substring(0, 10);
timepart = bewerbung_abgeschicktamum.substring(11); timepart = bewerbung_abgeschicktamum.substring(11);
timepart_arr = timepart.split(':');
for (i = 0; i <= 2; i++)
{
if (typeof timepart_arr[i] === 'undefined' || timepart_arr[i].length !== 2)
{
timepart_arr[i] = '00';
}
}
arr = datepart.split('.'); arr = datepart.split('.');
if(arr[0].length==1) if(arr[0].length==1)
@@ -2207,7 +2219,7 @@ function StudentRolleSpeichern(dialog, studiensemester_old, ausbildungssemester_
if(arr[1].length==1) if(arr[1].length==1)
arr[1]='0'+arr[1]; arr[1]='0'+arr[1];
bewerbung_abgeschicktamum = arr[2]+'-'+arr[1]+'-'+arr[0]+' '+timepart; bewerbung_abgeschicktamum = arr[2]+'-'+arr[1]+'-'+arr[0]+' '+timepart_arr.join(":");
} }
} }
+8 -7
View File
@@ -557,7 +557,7 @@ class dokument_export
$ch = curl_init(); $ch = curl_init();
curl_setopt($ch, CURLOPT_URL, SIGNATUR_URL); curl_setopt($ch, CURLOPT_URL, SIGNATUR_URL.'/'.SIGNATUR_SIGN_API);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 7); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 7);
curl_setopt($ch, CURLOPT_USERAGENT, "FH-Complete"); curl_setopt($ch, CURLOPT_USERAGENT, "FH-Complete");
@@ -589,18 +589,19 @@ class dokument_export
curl_close($ch); curl_close($ch);
$resultdata = json_decode($result); $resultdata = json_decode($result);
if (isset($resultdata->success) && $resultdata->success == 'true') // If it is success
if (isset($resultdata->error) && $resultdata->error == 0)
{ {
$this->signed_filename = $this->temp_folder .'/signed.pdf'; $this->signed_filename = $this->temp_folder .'/signed.pdf';
file_put_contents($this->signed_filename, base64_decode($resultdata->document)); file_put_contents($this->signed_filename, base64_decode($resultdata->retval));
return true; return true;
} }
else else // otherwise if it is an error
{ {
if(isset($resultdata->errormsg)) if(isset($resultdata->retval))
$this->errormsg = $resultdata->errormsg; $this->errormsg = $resultdata->retval;
else else
$this->errormsg = 'Unknown Error:'.print_r($resultdata,true); $this->errormsg = 'Unknown Error:'.print_r($resultdata, true);
return false; return false;
} }
} }
+4 -4
View File
@@ -718,10 +718,10 @@ class projektphase extends basis_db
( (
( (
(tbl_projekt.beginn<=now() or tbl_projekt.beginn is null) (tbl_projekt.beginn<=now() or tbl_projekt.beginn is null)
AND (tbl_projekt.ende + interval '1 month 1 day' >=now() OR tbl_projekt.ende is null) AND (tbl_projekt.ende + interval '7 month 1 day' >=now() OR tbl_projekt.ende is null)
) AND ( ) AND (
(tbl_projektphase.start<=now() or tbl_projektphase.start is null) (tbl_projektphase.start<=now() or tbl_projektphase.start is null)
AND (tbl_projektphase.ende + interval '1 month 1 day' >=now() OR tbl_projektphase.ende is null) AND (tbl_projektphase.ende + interval '7 month 1 day' >=now() OR tbl_projektphase.ende is null)
) )
) )
AND mitarbeiter_uid=" . $this->db_add_param($mitarbeiter_uid); AND mitarbeiter_uid=" . $this->db_add_param($mitarbeiter_uid);
@@ -787,10 +787,10 @@ class projektphase extends basis_db
( (
( (
(tbl_projekt.beginn<=now() or tbl_projekt.beginn is null) (tbl_projekt.beginn<=now() or tbl_projekt.beginn is null)
AND (tbl_projekt.ende + interval '1 month 1 day' >=now() OR tbl_projekt.ende is null) AND (tbl_projekt.ende + interval '7 month 1 day' >=now() OR tbl_projekt.ende is null)
) AND ( ) AND (
(tbl_projektphase.start<=now() or tbl_projektphase.start is null) (tbl_projektphase.start<=now() or tbl_projektphase.start is null)
AND (tbl_projektphase.ende + interval '1 month 1 day' >=now() OR tbl_projektphase.ende is null) AND (tbl_projektphase.ende + interval '7 month 1 day' >=now() OR tbl_projektphase.ende is null)
) )
) )
AND mitarbeiter_uid = ".$this->db_add_param($mitarbeiter_uid)." AND mitarbeiter_uid = ".$this->db_add_param($mitarbeiter_uid)."
+38
View File
@@ -0,0 +1,38 @@
<?php
require_once(dirname(__FILE__).'/basis_db.class.php');
require_once(dirname(__FILE__).'/sprache.class.php');
class rueckstellung extends basis_db
{
public function __construct()
{
parent::__construct();
}
/**
* Löscht alle Einträge mit dem Status "parked" von der übergebenen Person_id, die in der Zukunft liegen.
* @param $person_id
* @return bool
*/
public function deleteParked($person_id)
{
$qry = "DELETE
FROM public.tbl_rueckstellung
WHERE person_id = ".$this->db_add_param($person_id)."
AND status_kurzbz = 'parked'
AND datum_bis >= now();";
if($this->db_query($qry))
{
return true;
}
else
{
$this->errormsg = 'Fehler beim Löschen des geparkten Eintrages';
return false;
}
}
}
?>
+4 -2
View File
@@ -52,6 +52,7 @@ class statistik extends basis_db
// Daten der Statistik // Daten der Statistik
public $data; // DB ressource public $data; // DB ressource
public $html; public $html;
public $countRows;
public $csv; public $csv;
public $json; public $json;
@@ -510,6 +511,7 @@ class statistik extends basis_db
$this->html=''; $this->html='';
$this->csv=''; $this->csv='';
$this->json=array(); $this->json=array();
$this->countRows=0;
set_time_limit(120); set_time_limit(120);
if($this->sql!='') if($this->sql!='')
@@ -572,6 +574,7 @@ class statistik extends basis_db
$this->json[] = $row; $this->json[] = $row;
$this->html.= '</tr>'; $this->html.= '</tr>';
$this->csv=substr($this->csv,0,-1)."\n"; $this->csv=substr($this->csv,0,-1)."\n";
$this->countRows++;
} }
$this->html.= '</tbody>'; $this->html.= '</tbody>';
} }
@@ -586,8 +589,7 @@ class statistik extends basis_db
function getHtmlTable($id, $class='') function getHtmlTable($id, $class='')
{ {
return '<p>'.$this->countRows.' Zeilen</p><table class="'.$class.'" id="'.$id.'">'.$this->html.'</table>';
return '<table class="'.$class.'" id="'.$id.'">'.$this->html.'</table>';
} }
function getCSV() function getCSV()
+3
View File
@@ -91,6 +91,9 @@ $this->phrasen['abgabetool/projektbeurteilungDownload']='Projektbeurteilung heru
$this->phrasen['abgabetool/projektbeurteilungErstDownload']='Erst-/Begutachter'; $this->phrasen['abgabetool/projektbeurteilungErstDownload']='Erst-/Begutachter';
$this->phrasen['abgabetool/projektbeurteilungZweitDownload']='Zweitbegutachter'; $this->phrasen['abgabetool/projektbeurteilungZweitDownload']='Zweitbegutachter';
$this->phrasen['abgabetool/fehlerErmittelnEndabgabeProjektarbeit']='Fehler beim Ermitteln des Enduplaods der Projektarbeit'; $this->phrasen['abgabetool/fehlerErmittelnEndabgabeProjektarbeit']='Fehler beim Ermitteln des Enduplaods der Projektarbeit';
$this->phrasen['abgabetool/uploadedDocumentNotSignedStudent']='Es konnte keine gültige digitale Signatur erkannt werden. Bitte wenden Sie sich an Ihren Studiengang ob Ihre Endabgabe erfolgreich war und die Arbeit zur Benotung vorgelegt werden kann.';
$this->phrasen['abgabetool/uploadedDocumentNotSigned']='Signatur fehlt';
$this->phrasen['abgabetool/uploadedDocumentSigned']='Signatur vorhanden';
$this->phrasen['abgabetool/senatsMitglied']='Mitglied Prüfungssenat'; $this->phrasen['abgabetool/senatsMitglied']='Mitglied Prüfungssenat';
$this->phrasen['abgabetool/abgegeben']='Abgegeben, in Beurteilung'; $this->phrasen['abgabetool/abgegeben']='Abgegeben, in Beurteilung';
?> ?>
+3
View File
@@ -91,6 +91,9 @@ $this->phrasen['abgabetool/projektbeurteilungDownload']='Thesis-Assessment downl
$this->phrasen['abgabetool/projektbeurteilungErstDownload']='First-/Assessor'; $this->phrasen['abgabetool/projektbeurteilungErstDownload']='First-/Assessor';
$this->phrasen['abgabetool/projektbeurteilungZweitDownload']='Second Assessor'; $this->phrasen['abgabetool/projektbeurteilungZweitDownload']='Second Assessor';
$this->phrasen['abgabetool/fehlerErmittelnEndabgabeProjektarbeit']='Error when getting endupload of project work'; $this->phrasen['abgabetool/fehlerErmittelnEndabgabeProjektarbeit']='Error when getting endupload of project work';
$this->phrasen['abgabetool/uploadedDocumentNotSignedStudent']='The document does not contain an electronic signature. Please inform your Dregree Programm to verify the upload';
$this->phrasen['abgabetool/uploadedDocumentNotSigned']='Signature not found';
$this->phrasen['abgabetool/uploadedDocumentSigned']='Signature found';
$this->phrasen['abgabetool/senatsMitglied']='Examiner'; $this->phrasen['abgabetool/senatsMitglied']='Examiner';
$this->phrasen['abgabetool/abgegeben']='handed in, in assessment'; $this->phrasen['abgabetool/abgegeben']='handed in, in assessment';
?> ?>
+5 -8
View File
@@ -544,13 +544,10 @@ var FHC_TableWidget = {
options.columns = arrayTabulatorColumns; options.columns = arrayTabulatorColumns;
options.data = data.dataset; options.data = data.dataset;
if (typeof options.tableWidgetHeader == 'undefined') options.persistence = (typeof options.persistence == 'undefined') ? true : options.persistence; // enables persistence (default store in localStorage if available, else in cookie)
{ options.persistenceID = (typeof options.persistenceID == 'undefined') ? data.tableUniqueId : options.persistenceID; // persistenceID to store persistence data seperately for multiple tables
options.persistentLayout = true; // enables persistence (default store in localStorage if available, else in cookie) options.movableColumns = (typeof options.movableColumns == 'undefined') ? true : options.movableColumns; // allows changing column order
options.persistenceID = data.tableUniqueId; // TableWidget unique id to store persistence data seperately for multiple tables options.tooltipsHeader = (typeof options.tooltipsHeader == 'undefined') ? true : options.tooltipsHeader; // set header tooltip with column title
}
options.movableColumns = true; // allows changing column order
options.tooltipsHeader = true; // set header tooltip with column title
options.placeholder = _func_placeholder(); // display text when table is empty options.placeholder = _func_placeholder(); // display text when table is empty
if (typeof options.rowSelectionChanged == 'undefined') if (typeof options.rowSelectionChanged == 'undefined')
@@ -827,7 +824,7 @@ function _renderTabulatorHeaderCollapseHTML(tableWidgetDiv){
{ {
var field = column.getField(); var field = column.getField();
var title = column.getDefinition().title; var title = column.getDefinition().title;
var btn_select_col_selected = column.getVisibility() ? 'btn-select-col-selected' : ''; var btn_select_col_selected = column.isVisible() ? 'btn-select-col-selected' : '';
// If certain columns should be excluded from the column picker (define them in a blacklist array) // If certain columns should be excluded from the column picker (define them in a blacklist array)
if (typeof tableWidgetBlacklistArray_columnUnselectable != 'undefined' && if (typeof tableWidgetBlacklistArray_columnUnselectable != 'undefined' &&
+1 -245
View File
@@ -15,15 +15,11 @@ const STGFREIGABE_MESSAGE_VORLAGE_ANDERES_SEMESTER = "InfocenterSTGfreigegebenSe
//Statusgründe for which no Studiengang Freigabe Message should be sent //Statusgründe for which no Studiengang Freigabe Message should be sent
const FIT_PROGRAMM_STUDIENGAENGE = [10021, 10027]; const FIT_PROGRAMM_STUDIENGAENGE = [10021, 10027];
const PARKEDNAME = 'parked';
const ONHOLDNAME = 'onhold';
/** /**
* javascript file for infocenterDetails page * javascript file for infocenterDetails page
*/ */
$(document).ready(function () $(document).ready(function ()
{ {
InfocenterDetails._formatMessageTable(); InfocenterDetails._formatMessageTable();
InfocenterDetails._formatNotizTable(); InfocenterDetails._formatNotizTable();
InfocenterDetails._formatLogTable(); InfocenterDetails._formatLogTable();
@@ -88,7 +84,7 @@ $(document).ready(function ()
); );
//check if person is postponed (parked, on hold...) and display it //check if person is postponed (parked, on hold...) and display it
InfocenterDetails.getPostponeDate(personid); Rueckstellung.get(personid);
if ($(document).scrollTop() > 20) if ($(document).scrollTop() > 20)
$("#scrollToTop").show(); $("#scrollToTop").show();
@@ -374,155 +370,6 @@ var InfocenterDetails = {
} }
); );
}, },
getStudienjahrEnd: function()
{
FHC_AjaxClient.ajaxCallGet(
CALLED_PATH + "/getStudienjahrEnd",
null,
{
successCallback: function(data, textStatus, jqXHR) {
if (FHC_AjaxClient.hasData(data))
{
var engdate = $.datepicker.parseDate("yy-mm-dd", FHC_AjaxClient.getData(data)[0]);
if (engdate.getDate() === 31)
engdate.setDate(engdate.getDate() - 1);
engdate.setMonth(engdate.getMonth() + 3);
var gerdate = $.datepicker.formatDate("dd.mm.yy", engdate);
$("#postponedate").val(gerdate);
}
},
errorCallback: function()
{
FHC_DialogLib.alertError("error when getting Studienjahr end");
},
veilTimeout: 0
}
);
},
getPostponeDate: function(personid)
{
FHC_AjaxClient.ajaxCallGet(
CALLED_PATH + "/getPostponeDate/"+encodeURIComponent(personid),
null,
{
successCallback: function(data, textStatus, jqXHR) {
if (FHC_AjaxClient.hasData(data))
{
var postponeobj = FHC_AjaxClient.getData(data);
InfocenterDetails._refreshPostpone(postponeobj);
InfocenterDetails._refreshLog();
if (postponeobj === null || postponeobj.type === null)
InfocenterDetails.getStudienjahrEnd();
}
},
errorCallback: function()
{
FHC_DialogLib.alertError("error when getting parked status");
},
veilTimeout: 0
}
);
},
parkPerson: function(personid, date)
{
var parkError = function(){
$("#postponemsg").text(" Fehler beim Parken!");
};
FHC_AjaxClient.ajaxCallPost(
CALLED_PATH + '/park',
{
"person_id": personid,
"parkdate": date
},
{
successCallback: function(data, textStatus, jqXHR) {
if (FHC_AjaxClient.hasData(data))
InfocenterDetails.getPostponeDate(personid);
else
{
parkError();
}
},
errorCallback: parkError,
veilTimeout: 0
}
);
},
unparkPerson: function(personid)
{
FHC_AjaxClient.ajaxCallPost(
CALLED_PATH + '/unpark',
{
"person_id": personid
},
{
successCallback: function(data, textStatus, jqXHR) {
if (FHC_AjaxClient.hasData(data))
{
InfocenterDetails.getPostponeDate(personid);
}
else
$("#unpostponemsg").removeClass().addClass("text-warning").text(FHC_PhrasesLib.t('infocenter', 'nichtsZumAusparken'));
},
errorCallback: function(){
$("#unpostponemsg").removeClass().addClass("text-danger").text(FHC_PhrasesLib.t('infocenter', 'fehlerBeimAusparken'));
},
veilTimeout: 0
}
);
},
setPersonOnHold: function(personid, date)
{
var onHoldError = function(){
$("#postponemsg").text(" Fehler beim Setzen auf On Hold!");
};
FHC_AjaxClient.ajaxCallPost(
CALLED_PATH + '/setOnHold',
{
"person_id": personid,
"onholddate": date
},
{
successCallback: function(data, textStatus, jqXHR) {
if (FHC_AjaxClient.hasData(data))
InfocenterDetails.getPostponeDate(personid);
else
{
onHoldError();
}
},
errorCallback: onHoldError,
veilTimeout: 0
}
);
},
removePersonOnHold: function(personid)
{
FHC_AjaxClient.ajaxCallPost(
CALLED_PATH + '/removeOnHold',
{
"person_id": personid
},
{
successCallback: function(data, textStatus, jqXHR) {
if (FHC_AjaxClient.hasData(data))
{
InfocenterDetails.getPostponeDate(personid);
}
else
$("#unpostponemsg").removeClass().addClass("text-warning").text(FHC_PhrasesLib.t('infocenter', 'nichtsZumEntfernen'));
},
errorCallback: function(){
$("#unpostponemsg").removeClass().addClass("text-danger").text(FHC_PhrasesLib.t('infocenter', 'fehlerBeimEntfernen'));
},
veilTimeout: 0
}
);
},
getPrestudentData: function(personid, callback) getPrestudentData: function(personid, callback)
{ {
FHC_AjaxClient.ajaxCallGet( FHC_AjaxClient.ajaxCallGet(
@@ -943,97 +790,6 @@ var InfocenterDetails = {
} }
); );
}, },
_refreshPostpone: function(postponeobj)
{
var personid = $("#hiddenpersonid").val();
if (postponeobj === null || postponeobj.date === null || postponeobj.type === null)
{
//show both park and on hold buttons if not parked and not on hold
$("#postponing").html(
'<div class="form-group form-inline">'+
'<button class="btn btn-default" id="parklink" type="button""><i class="fa fa-clock-o"></i>&nbsp;' + FHC_PhrasesLib.t('infocenter', 'bewerberParken') + '</button>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'+
'<button class="btn btn-default" id="onholdlink" type="button""><i class="fa fa-anchor"></i>&nbsp;' + FHC_PhrasesLib.t('infocenter', 'bewerberOnHold') + '</button>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'+
'<label id="postponedatelabel">'+FHC_PhrasesLib.t('global', 'bis') + '&nbsp;&nbsp;'+
'<input id="postponedate" type="text" class="form-control" placeholder="Parkdatum">&nbsp;'+
'<i class="fa fa-info-circle" data-toggle="tooltip" title="'+FHC_PhrasesLib.t('infocenter', 'parkenZurueckstellenInfo')+'"></i></label>'+
'<span class="text-danger" id="postponemsg"></span>'+
'</div>');
$("#postponedate").datepicker({
"dateFormat": "dd.mm.yy",
"minDate": 1
});
$("#parklink").click(
function ()
{
var date = $("#postponedate").val();
InfocenterDetails.parkPerson(personid, date);
}
);
$("#onholdlink").click(
function ()
{
var date = $("#postponedate").val();
InfocenterDetails.setPersonOnHold(personid, date);
}
);
}
else
{
//info if parked/on hold and possibility to undo parking/on hold
var postponedate = $.datepicker.parseDate("yy-mm-dd", postponeobj.date);
var gerpostponedate = $.datepicker.formatDate("dd.mm.yy", postponedate);
//var postponehtml = "";
var callbackforundo = null;
var removePhrase = "";
var postponedPhrase = "";
var postponedtext = "";
if (postponeobj.type === PARKEDNAME)
{
removePhrase = 'bewerberAusparken';
postponedtext = FHC_PhrasesLib.t('infocenter', 'bewerberGeparktBis')+'&nbsp;&nbsp;'+gerpostponedate;
callbackforundo = function ()
{
InfocenterDetails.unparkPerson(personid);
}
}
else if (postponeobj.type === ONHOLDNAME)
{
removePhrase = 'bewerberOnHoldEntfernen';
postponedtext = FHC_PhrasesLib.t('infocenter', 'bewerberOnHoldBis')+'&nbsp;&nbsp;'+gerpostponedate;
var currdate = new Date();
if (currdate > postponedate)
postponedtext = "<span class='alert-danger' data-toggle='tooltip' title='"+FHC_PhrasesLib.t('infocenter', 'rueckstelldatumUeberschritten')+"'>"+postponedtext+"</span>";
callbackforundo = function ()
{
InfocenterDetails.removePersonOnHold(personid);
}
}
var postponehtml = postponedtext+'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'+
'<button class="btn btn-default" id="unpostponelink"><i class="fa fa-sign-out"></i>&nbsp;'+FHC_PhrasesLib.t('infocenter', removePhrase)+'</button>&nbsp;'+
'<span id="unpostponemsg"></span>';
$("#postponing").html(
postponehtml
);
$("#unpostponelink").click(
callbackforundo
);
}
},
_formatMessageTable: function() _formatMessageTable: function()
{ {
Tablesort.addTablesorter("msgtable", [[0, 1], [2, 0]], ["zebra", "filter"], 2); Tablesort.addTablesorter("msgtable", [[0, 1], [2, 0]], ["zebra", "filter"], 2);
+185
View File
@@ -0,0 +1,185 @@
const CONTROLLER_RUECKSTELLUNG_URL = "system/infocenter/Rueckstellung";
var Rueckstellung = {
get: function(personid)
{
FHC_AjaxClient.ajaxCallGet(
CONTROLLER_RUECKSTELLUNG_URL + "/get/"+encodeURIComponent(personid),
null,
{
successCallback: function(data, textStatus, jqXHR) {
if (FHC_AjaxClient.hasData(data))
{
var rueckstellungobj = FHC_AjaxClient.getData(data);
Rueckstellung._refreshRueckstellung(rueckstellungobj);
}
else
{
Rueckstellung._addRueckstellungButtons();
}
},
errorCallback: function()
{
FHC_DialogLib.alertError("error when getting rueckstellung status");
},
veilTimeout: 0
}
);
},
getStatus: function()
{
FHC_AjaxClient.ajaxCallGet(
CONTROLLER_RUECKSTELLUNG_URL + "/getStatus",
null,
{
successCallback: function(data, textStatus, jqXHR) {
if (FHC_AjaxClient.hasData(data))
{
let status = FHC_AjaxClient.getData(data);
$.each(status, function(key, value)
{
$('#rueckstellungtype').append($("<option/>")
.val(value.status_kurzbz)
.text(value.bezeichnung_mehrsprachig[0])
)
});
}
},
errorCallback: function()
{
FHC_DialogLib.alertError("error when getting rueckstellung status");
},
veilTimeout: 0
}
);
},
set: function(personid, date, type)
{
if (type === null)
return false;
var onRueckstellungError = function(){
$("#rueckstellungmsg").text(" Fehler beim Setzen auf " + type + "!");
};
FHC_AjaxClient.ajaxCallPost(
CONTROLLER_RUECKSTELLUNG_URL + '/set',
{
"person_id": personid,
"datum_bis": date,
"status_kurzbz": type,
},
{
successCallback: function(data, textStatus, jqXHR) {
if (FHC_AjaxClient.hasData(data))
{
Rueckstellung.get(personid);
InfocenterDetails._refreshLog()
}
else
{
onRueckstellungError();
}
},
errorCallback: onRueckstellungError,
veilTimeout: 0
}
);
},
delete: function(personid, status = null)
{
FHC_AjaxClient.ajaxCallPost(
CONTROLLER_RUECKSTELLUNG_URL + '/delete',
{
"person_id": personid,
"status": status
},
{
successCallback: function(data, textStatus, jqXHR) {
if (FHC_AjaxClient.hasData(data))
{
Rueckstellung.get(personid);
}
else
$("#unrueckstellungmsg").removeClass().addClass("text-warning").text(FHC_PhrasesLib.t('infocenter', 'nichtsZumEntfernen'));
},
errorCallback: function(){
$("#unrueckstellungmsg").removeClass().addClass("text-danger").text(FHC_PhrasesLib.t('infocenter', 'fehlerBeimEntfernen'));
},
veilTimeout: 0
}
);
},
_refreshRueckstellung: function(rueckstellungobj)
{
var personid = $("#hiddenpersonid").val();
var rueckstellungdate = $.datepicker.parseDate("yy-mm-dd", rueckstellungobj.bis);
var gerrueckstellungdate = $.datepicker.formatDate("dd.mm.yy", rueckstellungdate);
var removetext = FHC_PhrasesLib.t('infocenter', 'statusZuruecksetzen');
var rueckstellungdtext = FHC_PhrasesLib.t('global', 'status') + ": '" + rueckstellungobj.bezeichnung + "' " + FHC_PhrasesLib.t('global', 'bis') + ": " + gerrueckstellungdate +
" " + FHC_PhrasesLib.t('ui', 'von') + ": " + rueckstellungobj.von;
var currdate = new Date();
if (currdate > rueckstellungdate)
rueckstellungdtext = "<span class='alert-danger' data-toggle='tooltip' title='"+FHC_PhrasesLib.t('infocenter', 'datumuberschritten')+"'>"+rueckstellungdtext+"</span>";
var callbackforundo = function ()
{
Rueckstellung.delete(personid, rueckstellungobj.status_kurzbz);
}
var rueckstellunghtml = rueckstellungdtext+'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'+
'<button class="btn btn-default" id="unrueckstellunglink"><i class="fa fa-sign-out"></i>&nbsp;' + removetext +'</button>&nbsp;'+
'<span id="unrueckstellungmsg"></span>';
$("#postponing").html(
rueckstellunghtml
);
$("#unrueckstellunglink").click(
callbackforundo
);
},
_addRueckstellungButtons: function()
{
var personid = $("#hiddenpersonid").val();
$("#postponing").html(
'<div class="form-group form-inline">'+
'<div class="form-group">' +
'<select id="rueckstellungtype" class="form-control">' +
'<option disabled selected>' + FHC_PhrasesLib.t('infocenter', 'statusAuswahl') + '</option>' +
'</select>' + '&nbsp;&nbsp;' +
'<button class="btn btn-default" id="addRueckstellung" type="button""><i class="fa fa-clock-o"></i>&nbsp;' + FHC_PhrasesLib.t('infocenter', 'statusSetzen') + '</button>&nbsp;'+
'<label id="rueckstellungdatelabel">'+FHC_PhrasesLib.t('global', 'bis') + '&nbsp;&nbsp;'+
'<input id="rueckstellungdate" type="text" class="form-control" placeholder="Parkdatum">&nbsp;'+
'<i class="fa fa-info-circle" data-toggle="tooltip" title="'+FHC_PhrasesLib.t('infocenter', 'parkenZurueckstellenInfo')+'"></i></label>'+
'<span class="text-danger" id="rueckstellungmsg"></span>'+
'</div>' +
'</div>');
Rueckstellung.getStatus();
var rueckstelldate = new Date();
rueckstelldate.setDate(rueckstelldate.getDate() + 14);
$('#rueckstellungdate').attr("value", $.datepicker.formatDate("dd.mm.yy", rueckstelldate));
$("#rueckstellungdate").datepicker({
"dateFormat": "dd.mm.yy",
"minDate": 1
});
$("#addRueckstellung").click(
function ()
{
var date = $("#rueckstellungdate").val();
var type = $("#rueckstellungtype").val();
Rueckstellung.set(personid, date, type);
}
);
},
}
+2 -2
View File
@@ -140,7 +140,7 @@ var zgvUeberpruefung = {
var datum = new Date(); var datum = new Date();
datum.setDate(datum.getDate() + 14); datum.setDate(datum.getDate() + 14);
var formatedDate = $.datepicker.formatDate("mm/dd/yy", datum); var formatedDate = $.datepicker.formatDate("mm/dd/yy", datum);
InfocenterDetails.setPersonOnHold(response.person_id, formatedDate); Rueckstellung.set(response.person_id, formatedDate, 'onhold_zgv');
} }
InfocenterDetails._refreshLog(); InfocenterDetails._refreshLog();
@@ -171,7 +171,7 @@ var zgvUeberpruefung = {
var response = FHC_AjaxClient.getData(data) var response = FHC_AjaxClient.getData(data)
if (response.openZgv === false) if (response.openZgv === false)
InfocenterDetails.removePersonOnHold(response.person_id); Rueckstellung.delete(response.person_id, 'onhold_zgv');
FHC_DialogLib.alertSuccess(response.msg); FHC_DialogLib.alertSuccess(response.msg);
} else if (FHC_AjaxClient.isError(data)) } else if (FHC_AjaxClient.isError(data))
@@ -0,0 +1,242 @@
// TABULATOR
// ---------------------------------------------------------------------------------------------------------------------
// Add Edit and Update Buttons to table rows
function func_tableBuilt(table) {
table.addColumn(
{
title: "Aktion",
align: "center",
width: 150,
formatter: addActionButtons,
}, false // place column right
);
}
// Returns relative height (depending on screen size)
function func_height(table){
return $(window).height() * 0.50;
}
// Converts string date postgre style to string DD.MM.YYYY.
// This will allow correct filtering.
var formatDate = function(cell, formatterParams){
let postgreDate = cell.getValue();
if (postgreDate != null)
{
var d = new Date(postgreDate);
return ("0" + (d.getDate())).slice(-2) + "." + ("0" + (d.getMonth() + 1)).slice(-2) + "." + d.getFullYear();
}
}
// Create Edit and Update Buttons for table rows
var addActionButtons = function(cell) {
// Create edit button
var editBtn = document.createElement("button");
editBtn.type = "button";
editBtn.innerHTML = "<i class=\"fa fa-edit\"></i>";
editBtn.classList.add("azrEditBtn");
editBtn.classList.add("btn");
editBtn.classList.add("btn-default");
editBtn.addEventListener("click", function(){
adminAnrechnung.editRow(cell);
});
// Create delete button
var delBtn= document.createElement("button");
delBtn.type = "button";
delBtn.innerHTML = "<i class=\"fa fa-times\"></i>";
delBtn.classList.add("azrDeleteBtn");
delBtn.classList.add("btn");
delBtn.classList.add("btn-default");
delBtn.style.marginLeft = '5px';
delBtn.addEventListener("click", function(){
adminAnrechnung.deleteRow(cell);
});
// Add buttons to cell
var buttonHolder = document.createElement("span");
buttonHolder.appendChild(editBtn);
buttonHolder.appendChild(delBtn);
return buttonHolder;
}
// ---------------------------------------------------------------------------------------------------------------------
$(function () {
// Empty Modal fields on 'Anrechnungszeitraum hinzufuegen'
$(document).on('click', '.azrOpenModal', function(){
let defaultStudiensemester_kurzbz = $('.modal-body #defaultStudiensemester_kurzbz').val();
$('.modal-header #azrModalLabel').text(FHC_PhrasesLib.t("anrechnung", "anrechnungszeitraumHinzufuegen"));
$('.modal-body #anrechnungszeitraum_id').val('');
$('.modal-body #studiensemester').val(defaultStudiensemester_kurzbz).change();
$('.modal-body #azrStart').val('');
$('.modal-body #azrEnde').val('');
});
// Insert Anrechnungszeitraum
$(document).on('click', '#azrInsertBtn', function(){
var studiensemester_kurzbz = $('.modal-body #studiensemester').val();
var anrechnungstart = $('.modal-body #azrStart').val();
var anrechnungende = $('.modal-body #azrEnde').val();
// Insert Anrechnungszeitraum
adminAnrechnung.insertAzr(studiensemester_kurzbz, anrechnungstart, anrechnungende);
});
})
var adminAnrechnung = {
insertAzr: function(studiensemester_kurzbz, anrechnungstart, anrechnungende){
FHC_AjaxClient.ajaxCallPost(
FHC_JS_DATA_STORAGE_OBJECT.called_path + "/save",
{
studiensemester_kurzbz: studiensemester_kurzbz,
anrechnungstart: anrechnungstart,
anrechnungende: anrechnungende
},
{
successCallback: function (data, textStatus, jqXHR)
{
if (FHC_AjaxClient.isError(data))
{
FHC_DialogLib.alertWarning(FHC_AjaxClient.getError(data));
}
if (FHC_AjaxClient.hasData(data))
{
data = FHC_AjaxClient.getData(data);
// Update row
$('#tableWidgetTabulator').tabulator('addData', [{
anrechnungszeitraum_id: data.anrechnungszeitraum_id,
studiensemester_kurzbz: studiensemester_kurzbz,
anrechnungstart: anrechnungstart,
anrechnungende: anrechnungende
}], true); // true to add row on top
// Close Modal
$('#azrModal').modal('hide');
// Success message
FHC_DialogLib.alertSuccess(FHC_PhrasesLib.t("ui", "gespeichert"));
}
},
errorCallback: function (jqXHR, textStatus, errorThrown)
{
FHC_DialogLib.alertError(FHC_PhrasesLib.t("ui", "systemfehler"));
}
}
);
},
editRow: function (cell){
// Open Modal
$('#azrModal').modal('show');
let row = cell.getRow();
var anrechnungszeitraum_id = row.getData().anrechnungszeitraum_id;
var studiensemester_kurzbz = row.getData().studiensemester_kurzbz;
var anrechnungstart = row.getData().anrechnungstart;
var anrechnungende = row.getData().anrechnungende;
$('.modal-header #azrModalLabel').text('Anrechnungszeitraum bearbeiten');
$('.modal-body #anrechnungszeitraum_id').val(anrechnungszeitraum_id);
$('.modal-body #studiensemester').val(studiensemester_kurzbz).change();
$('.modal-body #azrStart').val(anrechnungstart);
$('.modal-body #azrEnde').val(anrechnungende);
},
updateAzr: function (anrechnungszeitraum_id, studiensemester_kurzbz, anrechnungstart, anrechnungende) {
FHC_AjaxClient.ajaxCallPost(
FHC_JS_DATA_STORAGE_OBJECT.called_path + "/edit",
{
anrechnungszeitraum_id: anrechnungszeitraum_id,
studiensemester_kurzbz: studiensemester_kurzbz,
anrechnungstart: anrechnungstart,
anrechnungende: anrechnungende
},
{
successCallback: function (data, textStatus, jqXHR)
{
if (FHC_AjaxClient.isError(data))
{
FHC_DialogLib.alertWarning(FHC_AjaxClient.getError(data));
}
if (FHC_AjaxClient.hasData(data))
{
// Update row
$('#tableWidgetTabulator').tabulator('updateData', [{
anrechnungszeitraum_id: anrechnungszeitraum_id,
studiensemester_kurzbz: studiensemester_kurzbz,
anrechnungstart: anrechnungstart,
anrechnungende: anrechnungende
}]);
// Close Modal
$('#azrModal').modal('hide');
// Success message
FHC_DialogLib.alertSuccess(FHC_PhrasesLib.t("ui", "gespeichert"));
}
},
errorCallback: function (jqXHR, textStatus, errorThrown)
{
FHC_DialogLib.alertError(FHC_PhrasesLib.t("ui", "systemfehler"));
}
}
);
},
deleteAzr: function(anrechnungszeitraum_id){
FHC_AjaxClient.ajaxCallPost(
FHC_JS_DATA_STORAGE_OBJECT.called_path + "/delete",
{
anrechnungszeitraum_id: anrechnungszeitraum_id
},
{
successCallback: function (data, textStatus, jqXHR)
{
if (FHC_AjaxClient.isError(data))
{
FHC_DialogLib.alertWarning(FHC_AjaxClient.getError(data));
}
if (FHC_AjaxClient.hasData(data))
{
let row = $('#tableWidgetTabulator').tabulator('getRow', anrechnungszeitraum_id);
row.delete(anrechnungszeitraum_id);
// Success message
FHC_DialogLib.alertSuccess(FHC_PhrasesLib.t("ui", "geloescht"));
}
},
errorCallback: function (jqXHR, textStatus, errorThrown)
{
FHC_DialogLib.alertError(FHC_PhrasesLib.t("ui", "systemfehler"));
}
}
);
},
deleteRow: function (cell){
if(!confirm(FHC_PhrasesLib.t("ui", "frageSicherLoeschen")))
{
return;
}
// Delete Anrechnungszeitraum
adminAnrechnung.deleteAzr(cell.getRow().getData().anrechnungszeitraum_id);
}
}
@@ -141,6 +141,13 @@ $(function(){
return; return;
} }
// Check if forgot to fulfill begruendung
if (begruendung.trim().endsWith('weil') || begruendung.endsWith('because of'))
{
FHC_DialogLib.alertInfo(FHC_PhrasesLib.t("ui", "bitteBegruendungVervollstaendigen"));
return;
}
// Get form data // Get form data
let form_data = $('form').serializeArray(); let form_data = $('form').serializeArray();
@@ -194,17 +201,9 @@ $(function(){
// Get form data // Get form data
let form_data = $('#form-empfehlung').serializeArray(); let form_data = $('#form-empfehlung').serializeArray();
// Prepare data object for ajax call
let data = {
'data': [{
'anrechnung_id' : form_data[0].value
}]
};
FHC_AjaxClient.ajaxCallPost( FHC_AjaxClient.ajaxCallPost(
FHC_JS_DATA_STORAGE_OBJECT.called_path + "/requestRecommendation", FHC_JS_DATA_STORAGE_OBJECT.called_path + "/requestRecommendation",
data, {anrechnung_id: form_data[0].value},
{ {
successCallback: function (data, textStatus, jqXHR) successCallback: function (data, textStatus, jqXHR)
{ {
@@ -471,11 +470,27 @@ var approveAnrechnungDetail = {
textarea.val($.trim($('#approveAnrechnungDetail-empfehlungDetail-begruendung').text())); textarea.val($.trim($('#approveAnrechnungDetail-empfehlungDetail-begruendung').text()));
return; return;
} }
else
// Find Begruendung span
let textspan = $(elem).parent().find('span:first');
// Get Begruendung
let begruendung = textspan.text();
// Check if Begruendung has helptext
let hasHelptext = textspan.children('span #helpTxtBegruendungErgaenzen').length > 0;
if (hasHelptext)
{ {
// Copy begruendung into textarea let helptext = textspan.children('span #helpTxtBegruendungErgaenzen').text();
textarea.val($.trim($(elem).parent().find('span:first').text()));
// Remove helptext
begruendung = begruendung.replace(helptext, '');
} }
// Copy begruendung into textarea and set focus
textarea.val($.trim(begruendung)).focus();
}, },
formatEmpfehlungIsRequested: function(statusBezeichnung, empfehlungsanfrageAm, empfehlungsanfrageAn) { formatEmpfehlungIsRequested: function(statusBezeichnung, empfehlungsanfrageAm, empfehlungsanfrageAn) {
$('#approveAnrechnungDetail-empfehlungDetail-empfehlungsanfrageAm').html(empfehlungsanfrageAm); $('#approveAnrechnungDetail-empfehlungDetail-empfehlungsanfrageAm').html(empfehlungsanfrageAm);
@@ -57,6 +57,12 @@ function hf_filterTrueFalse(headerValue, rowValue){
} }
} }
// Filters schreibberechtigt boolean values
function hf_schreibberechtigt(headerValue, rowValue){
return rowValue == headerValue.toString();
}
// Adds column details // Adds column details
// Sets focus on filterbutton, if table starts with stored filter. // Sets focus on filterbutton, if table starts with stored filter.
function func_tableBuilt(table) { function func_tableBuilt(table) {
@@ -173,19 +179,22 @@ function func_selectableCheck(row){
// data = selected data, rows = selected rows // data = selected data, rows = selected rows
function func_rowSelectionChanged(data, rows){ function func_rowSelectionChanged(data, rows){
// Sum up over all anzurechnenden LV-ECTS by Prestudent if (tabulator != null)
selectedPrestudentWithAccumulatedLvEcts = approveAnrechnung.getSumLvEctsByPreStudent(data); {
// Sum up over all anzurechnenden LV-ECTS by Prestudent
selectedPrestudentWithAccumulatedLvEcts = approveAnrechnung.getSumLvEctsByPreStudent(data);
// Loop through all active rows // Loop through all active rows
var rowManager = tabulator.rowManager; var rowManager = tabulator.rowManager;
for (var i = 0; i < rowManager.activeRows.length; i++) { for (var i = 0; i < rowManager.activeRows.length; i++) {
// Reinitialize row -> triggers formatters. // Reinitialize row -> triggers formatters.
rowManager.activeRows[i].reinitialize(); rowManager.activeRows[i].reinitialize();
}
// Show number of selected rows.
approveAnrechnung.showNumberSelectedRows(rows);
} }
// Show number of selected rows.
approveAnrechnung.showNumberSelectedRows(rows);
} }
// Returns tooltip // Returns tooltip
@@ -570,12 +579,8 @@ $(function(){
} }
} }
selected_data.map(function(data){ // Reduce to necessary fields
// reduce to necessary fields selected_data = selected_data.map(data => ({'anrechnung_id' : data.anrechnung_id}));
return {
'anrechnung_id' : data.anrechnung_id,
}
});
// Alert and exit if no anrechnung is selected // Alert and exit if no anrechnung is selected
if (selected_data.length == 0) if (selected_data.length == 0)
@@ -584,14 +589,9 @@ $(function(){
return; return;
} }
// Prepare data object for ajax call
let data = {
'data': selected_data
};
FHC_AjaxClient.ajaxCallPost( FHC_AjaxClient.ajaxCallPost(
FHC_JS_DATA_STORAGE_OBJECT.called_path + "/requestRecommendation", FHC_JS_DATA_STORAGE_OBJECT.called_path + "/requestRecommendation",
data, {data: selected_data},
{ {
successCallback: function (data, textStatus, jqXHR) successCallback: function (data, textStatus, jqXHR)
{ {
@@ -617,14 +617,14 @@ $(function(){
// Print success message // Print success message
FHC_DialogLib.alertSuccess(FHC_PhrasesLib.t("ui", "empfehlungWurdeAngefordert")); FHC_DialogLib.alertSuccess(FHC_PhrasesLib.t("ui", "empfehlungWurdeAngefordert"));
} }
//Update status 'genehmigt'
$('#tableWidgetTabulator').tabulator('updateData', data);
// Deselect rows
var indexesToDeselect = data.map(x => x.anrechnung_id);
$("#tableWidgetTabulator").tabulator('deselectRow', indexesToDeselect);
} }
//Update status 'genehmigt'
$('#tableWidgetTabulator').tabulator('updateData', data);
// Deselect rows
var indexesToDeselect = data.map(x => x.anrechnung_id);
$("#tableWidgetTabulator").tabulator('deselectRow', indexesToDeselect);
}, },
errorCallback: function (jqXHR, textStatus, errorThrown) errorCallback: function (jqXHR, textStatus, errorThrown)
{ {
@@ -701,8 +701,8 @@ var approveAnrechnung = {
// Find closest textarea // Find closest textarea
let textarea = $(elem).closest('div').find('textarea'); let textarea = $(elem).closest('div').find('textarea');
// Copy begruendung into textarea // Copy begruendung into textarea and set focus
textarea.val($.trim($(elem).parent().text())); textarea.val($.trim($(elem).parent().text())).focus();
}, },
focusFilterbuttonIfTableStartsWithStoredFilter(filters){ focusFilterbuttonIfTableStartsWithStoredFilter(filters){
switch (filters[0].value) { switch (filters[0].value) {
@@ -133,6 +133,13 @@ $(function(){
return; return;
} }
// Check if forgot to fulfill begruendung
if (begruendung.trim().endsWith('weil') || begruendung.endsWith('because of'))
{
FHC_DialogLib.alertInfo(FHC_PhrasesLib.t("ui", "bitteBegruendungVervollstaendigen"));
return;
}
// Get form data // Get form data
let form_data = $('form').serializeArray(); let form_data = $('form').serializeArray();
@@ -241,8 +248,26 @@ var reviewAnrechnung = {
// Find closest textarea // Find closest textarea
let textarea = $(elem).closest('div').find('textarea'); let textarea = $(elem).closest('div').find('textarea');
// Copy begruendung into textarea // Find Begruendung span
textarea.val($.trim($(elem).parent().find('span:first').text())); let textspan = $(elem).parent().find('span:first');
// Get Begruendung
let begruendung = textspan.text();
// Check if Begruendung has helptext
let hasHelptext = textspan.children('span #helpTxtBegruendungErgaenzen').length > 0;
if (hasHelptext)
{
let helptext = textspan.children('span #helpTxtBegruendungErgaenzen').text();
// Remove helptext
begruendung = begruendung.replace(helptext, '');
}
// Copy begruendung into textarea and set focus
textarea.val($.trim(begruendung)).focus();
}, },
formatEmpfehlungIsTrue: function(empfehlungAm, emfehlungVon, statusBezeichnung){ formatEmpfehlungIsTrue: function(empfehlungAm, emfehlungVon, statusBezeichnung){
$('#reviewAnrechnungDetail-status_kurzbz').text(statusBezeichnung); $('#reviewAnrechnungDetail-status_kurzbz').text(statusBezeichnung);
@@ -51,6 +51,12 @@ function hf_filterTrueFalse(headerValue, rowValue){
} }
} }
// Filters empfehlungsberechtigt boolean values
function hf_empfehlungsberechtigt(headerValue, rowValue){
return rowValue == headerValue.toString();
}
// Adds column details // Adds column details
function func_tableBuilt(table) { function func_tableBuilt(table) {
table.addColumn( table.addColumn(
@@ -74,9 +80,10 @@ function func_tableBuilt(table) {
// Formats the rows // Formats the rows
function func_rowFormatter(row){ function func_rowFormatter(row){
let status_kurzbz = row.getData().status_kurzbz; let status_kurzbz = row.getData().status_kurzbz;
let empfehlungsberechtigt = row.getData().empfehlungsberechtigt;
row.getCells().forEach(function(cell){ row.getCells().forEach(function(cell){
if (status_kurzbz != ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR) if (status_kurzbz != ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR || empfehlungsberechtigt == "false")
{ {
row.getElement().style["background-color"] = COLOR_LIGHTGREY; // default row.getElement().style["background-color"] = COLOR_LIGHTGREY; // default
} }
@@ -86,9 +93,10 @@ function func_rowFormatter(row){
// Formats row selectable/unselectable // Formats row selectable/unselectable
function func_selectableCheck(row){ function func_selectableCheck(row){
let status_kurzbz = row.getData().status_kurzbz; let status_kurzbz = row.getData().status_kurzbz;
let empfehlungsberechtigt = row.getData().empfehlungsberechtigt;
return ( return (
status_kurzbz == ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR status_kurzbz == ANRECHNUNGSTATUS_PROGRESSED_BY_LEKTOR || empfehlungsberechtigt == "false"
); );
} }
@@ -441,7 +449,7 @@ var reviewAnrechnung = {
// Find closest textarea // Find closest textarea
let textarea = $(elem).closest('div').find('textarea'); let textarea = $(elem).closest('div').find('textarea');
// Copy begruendung into textarea // Copy begruendung into textarea and set focus
textarea.val($.trim($(elem).parent().text())); textarea.val($.trim($(elem).parent().text())).focus();
} }
} }
+5 -5
View File
@@ -257,7 +257,7 @@ if (isset($_REQUEST["xmlformat"]) && $_REQUEST["xmlformat"] == "xml")
if($row->typ=='d') if($row->typ=='d')
{ {
echo ' <niveau_code>UNESCO ISCED 7</niveau_code>'; echo ' <niveau_code>UNESCO ISCED 7</niveau_code>';
echo ' <zulassungsvoraussetzungen_deutsch><![CDATA[Allgemeine Universitätsreife (vgl. §4 Abs. 3 FHStG idgF), Berufsreifeprüfung bzw. Studienberechtigungsprüfung oder einschlägige berufliche Qualifikation (Lehrabschluss bzw. Abschluss einer berufsbildenden mittleren Schule mit Zusatzprüfungen). Die Aufnahme erfolgt auf Basis eines Auswahlverfahrens (Werdegang, Eignungstest, Bewerbungsgespräch).]]></zulassungsvoraussetzungen_deutsch>'; echo ' <zulassungsvoraussetzungen_deutsch><![CDATA[Allgemeine Universitätsreife (vgl. §4 Abs. 3 FHG idgF), Berufsreifeprüfung bzw. Studienberechtigungsprüfung oder einschlägige berufliche Qualifikation (Lehrabschluss bzw. Abschluss einer berufsbildenden mittleren Schule mit Zusatzprüfungen). Die Aufnahme erfolgt auf Basis eines Auswahlverfahrens (Werdegang, Eignungstest, Bewerbungsgespräch).]]></zulassungsvoraussetzungen_deutsch>';
echo ' <zulassungsvoraussetzungen_englisch><![CDATA[Austrian or equivalent foreign school leaving certificate (Reifeprüfung), university entrance examination certificate (Studienberechtigungsprüfung), certificate or equivalent relevant professional qualification (Berufsreifeprüfung) plus entrance examination equal to the university entrance examination. Admission is on the basis of a selection process (including entrance exam and interview, professional background is considered).]]></zulassungsvoraussetzungen_englisch>'; echo ' <zulassungsvoraussetzungen_englisch><![CDATA[Austrian or equivalent foreign school leaving certificate (Reifeprüfung), university entrance examination certificate (Studienberechtigungsprüfung), certificate or equivalent relevant professional qualification (Berufsreifeprüfung) plus entrance examination equal to the university entrance examination. Admission is on the basis of a selection process (including entrance exam and interview, professional background is considered).]]></zulassungsvoraussetzungen_englisch>';
echo ' <anforderungen_deutsch><![CDATA[Das Studium erfordert die positive Absolvierung von Lehrveranstaltungen (Vorlesungen, Übungen, Seminaren, Projekten, integrierten Lehrveranstaltungen) im Ausmaß von jeweils 30 ECTS pro Semester gemäß dem vorgeschriebenen Studienplan. Die Ausbildung integriert technische, wirtschaftliche, organisatorische und persönlichkeitsbildende Elemente. '.$anforderungen_praxis.' Im Rahmen des Studiums ist eine Diplomarbeit zu verfassen und eine abschließende Prüfung (Diplomprüfung) zu absolvieren. Der Studiengang (Kennzahl '.$studiengang_kz.') ist von der AQ Austria akkreditiert.]]></anforderungen_deutsch>'; echo ' <anforderungen_deutsch><![CDATA[Das Studium erfordert die positive Absolvierung von Lehrveranstaltungen (Vorlesungen, Übungen, Seminaren, Projekten, integrierten Lehrveranstaltungen) im Ausmaß von jeweils 30 ECTS pro Semester gemäß dem vorgeschriebenen Studienplan. Die Ausbildung integriert technische, wirtschaftliche, organisatorische und persönlichkeitsbildende Elemente. '.$anforderungen_praxis.' Im Rahmen des Studiums ist eine Diplomarbeit zu verfassen und eine abschließende Prüfung (Diplomprüfung) zu absolvieren. Der Studiengang (Kennzahl '.$studiengang_kz.') ist von der AQ Austria akkreditiert.]]></anforderungen_deutsch>';
echo ' <anforderungen_englisch><![CDATA[The program requires the positive completion of all courses (lectures, labs, seminars, project work, and integrated courses) to the extend of 30 ECTS per semester according to the curriculum. The program integrates technical, economical, management and personal study elements. '.$anforderungen_praxiseng.' The degree is awarded upon the successful completion of a diploma theses and the final examination. The program (classification number '.$studiengang_kz.') is accredited by AQ Austria.]]></anforderungen_englisch>'; echo ' <anforderungen_englisch><![CDATA[The program requires the positive completion of all courses (lectures, labs, seminars, project work, and integrated courses) to the extend of 30 ECTS per semester according to the curriculum. The program integrates technical, economical, management and personal study elements. '.$anforderungen_praxiseng.' The degree is awarded upon the successful completion of a diploma theses and the final examination. The program (classification number '.$studiengang_kz.') is accredited by AQ Austria.]]></anforderungen_englisch>';
@@ -269,7 +269,7 @@ if (isset($_REQUEST["xmlformat"]) && $_REQUEST["xmlformat"] == "xml")
elseif($row->typ=='m') elseif($row->typ=='m')
{ {
echo ' <niveau_code>UNESCO ISCED 7</niveau_code>'; echo ' <niveau_code>UNESCO ISCED 7</niveau_code>';
echo ' <zulassungsvoraussetzungen_deutsch><![CDATA[Die fachliche Zugangsvoraussetzung (vgl. §4 Abs. 2 FHStG idgF) zu einem FH-Masterstudiengang ist ein abgeschlossener facheinschlägiger FH-Bachelorstudiengang oder der Abschluss eines gleichwertigen Studiums an einer anerkannten inländischen oder ausländischen postsekundären Bildungseinrichtung. Die Aufnahme in den Studiengang erfolgt auf Basis eines Auswahlverfahrens.]]></zulassungsvoraussetzungen_deutsch>'; echo ' <zulassungsvoraussetzungen_deutsch><![CDATA[Die fachliche Zugangsvoraussetzung (vgl. §4 Abs. 2 FHG idgF) zu einem FH-Masterstudiengang ist ein abgeschlossener facheinschlägiger FH-Bachelorstudiengang oder der Abschluss eines gleichwertigen Studiums an einer anerkannten inländischen oder ausländischen postsekundären Bildungseinrichtung. Die Aufnahme in den Studiengang erfolgt auf Basis eines Auswahlverfahrens.]]></zulassungsvoraussetzungen_deutsch>';
echo ' <zulassungsvoraussetzungen_englisch><![CDATA[ Admission to the master\'s degree program is granted on the basis of the successful completion of a relevant bachelor\'s degree program or a comparable Austrian or foreign post-secondary degree acknowledged to be its equivalent. Admission is on the basis of a selection process. ]]></zulassungsvoraussetzungen_englisch>'; echo ' <zulassungsvoraussetzungen_englisch><![CDATA[ Admission to the master\'s degree program is granted on the basis of the successful completion of a relevant bachelor\'s degree program or a comparable Austrian or foreign post-secondary degree acknowledged to be its equivalent. Admission is on the basis of a selection process. ]]></zulassungsvoraussetzungen_englisch>';
echo ' <anforderungen_deutsch><![CDATA[Das Studium erfordert die positive Absolvierung von Lehrveranstaltungen (Vorlesungen, Übungen, Seminaren, Projekten, integrierten Lehrveranstaltungen) im Ausmaß von jeweils 30 ECTS pro Semester gemäß dem vorgeschriebenen Studienplan. Die Ausbildung integriert technische, wirtschaftliche, organisatorische und persönlichkeitsbildende Elemente. Im Rahmen des Studiums ist eine Masterarbeit zu verfassen und eine abschließende Prüfung (Masterprüfung) zu absolvieren. Der Studiengang (Kennzahl '.$studiengang_kz.') ist von der AQ Austria akkreditiert.]]></anforderungen_deutsch>'; echo ' <anforderungen_deutsch><![CDATA[Das Studium erfordert die positive Absolvierung von Lehrveranstaltungen (Vorlesungen, Übungen, Seminaren, Projekten, integrierten Lehrveranstaltungen) im Ausmaß von jeweils 30 ECTS pro Semester gemäß dem vorgeschriebenen Studienplan. Die Ausbildung integriert technische, wirtschaftliche, organisatorische und persönlichkeitsbildende Elemente. Im Rahmen des Studiums ist eine Masterarbeit zu verfassen und eine abschließende Prüfung (Masterprüfung) zu absolvieren. Der Studiengang (Kennzahl '.$studiengang_kz.') ist von der AQ Austria akkreditiert.]]></anforderungen_deutsch>';
echo ' <anforderungen_englisch><![CDATA[The program requires the positive completion of all courses (lectures, labs, seminars, project work, and integrated courses) to the extend of 30 ECTS per semester according to the curriculum. The program integrates technical, economical, management and personal study elements. The degree is awarded upon the successful completion of a Master´s Thesis and the final examination. The program (classification number '.$studiengang_kz.') is accredited by AQ Austria.]]></anforderungen_englisch>'; echo ' <anforderungen_englisch><![CDATA[The program requires the positive completion of all courses (lectures, labs, seminars, project work, and integrated courses) to the extend of 30 ECTS per semester according to the curriculum. The program integrates technical, economical, management and personal study elements. The degree is awarded upon the successful completion of a Master´s Thesis and the final examination. The program (classification number '.$studiengang_kz.') is accredited by AQ Austria.]]></anforderungen_englisch>';
@@ -281,7 +281,7 @@ if (isset($_REQUEST["xmlformat"]) && $_REQUEST["xmlformat"] == "xml")
elseif($row->typ=='b') elseif($row->typ=='b')
{ {
echo ' <niveau_code>UNESCO ISCED 6</niveau_code>'; echo ' <niveau_code>UNESCO ISCED 6</niveau_code>';
echo ' <zulassungsvoraussetzungen_deutsch><![CDATA[Allgemeine Universitätsreife (vgl. §4 Abs. 3 FHStG idgF), Berufsreifeprüfung bzw. Studienberechtigungsprüfung oder einschlägige berufliche Qualifikation (Lehrabschluss bzw. Abschluss einer berufsbildenden mittleren Schule mit Zusatzprüfungen). Die Aufnahme erfolgt auf Basis eines Auswahlverfahrens (Werdegang, Eignungstest, Bewerbungsgespräch).]]></zulassungsvoraussetzungen_deutsch>'; echo ' <zulassungsvoraussetzungen_deutsch><![CDATA[Allgemeine Universitätsreife (vgl. §4 Abs. 3 FHG idgF), Berufsreifeprüfung bzw. Studienberechtigungsprüfung oder einschlägige berufliche Qualifikation (Lehrabschluss bzw. Abschluss einer berufsbildenden mittleren Schule mit Zusatzprüfungen). Die Aufnahme erfolgt auf Basis eines Auswahlverfahrens (Werdegang, Eignungstest, Bewerbungsgespräch).]]></zulassungsvoraussetzungen_deutsch>';
echo ' <zulassungsvoraussetzungen_englisch><![CDATA[Austrian or equivalent foreign school leaving certificate (Reifeprüfung), university entrance examination certificate (Studienberechtigungsprüfung), certificate or equivalent relevant professional qualification (Berufsreifeprüfung) plus entrance examination equal to the university entrance examination. Admission is on the basis of a selection process. (including entrance exam and interview, professional background is considered).]]></zulassungsvoraussetzungen_englisch>'; echo ' <zulassungsvoraussetzungen_englisch><![CDATA[Austrian or equivalent foreign school leaving certificate (Reifeprüfung), university entrance examination certificate (Studienberechtigungsprüfung), certificate or equivalent relevant professional qualification (Berufsreifeprüfung) plus entrance examination equal to the university entrance examination. Admission is on the basis of a selection process. (including entrance exam and interview, professional background is considered).]]></zulassungsvoraussetzungen_englisch>';
echo ' <anforderungen_deutsch><![CDATA[Das Studium erfordert die positive Absolvierung von Lehrveranstaltungen (Vorlesungen, Übungen, Seminaren, Projekten, integrierten Lehrveranstaltungen) im Ausmaß von jeweils 30 ECTS pro Semester gemäß dem vorgeschriebenen Studienplan. Die Ausbildung integriert technische, wirtschaftliche, organisatorische und persönlichkeitsbildende Elemente. '.$anforderungen_praxis.' Im Rahmen des Studiums ist eine Bachelorarbeit zu verfassen und eine abschließende Prüfung (Bachelorprüfung) zu absolvieren. Der Studiengang (Kennzahl '.$studiengang_kz.') ist von der AQ Austria akkreditiert.]]></anforderungen_deutsch>'; echo ' <anforderungen_deutsch><![CDATA[Das Studium erfordert die positive Absolvierung von Lehrveranstaltungen (Vorlesungen, Übungen, Seminaren, Projekten, integrierten Lehrveranstaltungen) im Ausmaß von jeweils 30 ECTS pro Semester gemäß dem vorgeschriebenen Studienplan. Die Ausbildung integriert technische, wirtschaftliche, organisatorische und persönlichkeitsbildende Elemente. '.$anforderungen_praxis.' Im Rahmen des Studiums ist eine Bachelorarbeit zu verfassen und eine abschließende Prüfung (Bachelorprüfung) zu absolvieren. Der Studiengang (Kennzahl '.$studiengang_kz.') ist von der AQ Austria akkreditiert.]]></anforderungen_deutsch>';
echo ' <anforderungen_englisch><![CDATA[The program requires the positive completion of all courses (lectures, labs, seminars, project work, and integrated courses) to the extend of 30 ECTS per semester according to the curriculum. The program integrates technical, economical, management and personal study elements. '.$anforderungen_praxiseng.' The degree is awarded upon the successful completion of 1 bachelor theses and the final examination. The program (classification number '.$studiengang_kz.') is accredited by AQ Austria.]]></anforderungen_englisch>'; echo ' <anforderungen_englisch><![CDATA[The program requires the positive completion of all courses (lectures, labs, seminars, project work, and integrated courses) to the extend of 30 ECTS per semester according to the curriculum. The program integrates technical, economical, management and personal study elements. '.$anforderungen_praxiseng.' The degree is awarded upon the successful completion of 1 bachelor theses and the final examination. The program (classification number '.$studiengang_kz.') is accredited by AQ Austria.]]></anforderungen_englisch>';
@@ -299,8 +299,8 @@ if (isset($_REQUEST["xmlformat"]) && $_REQUEST["xmlformat"] == "xml")
elseif($row->typ=='l' || $row->typ=='k' || $row->typ=='e') elseif($row->typ=='l' || $row->typ=='k' || $row->typ=='e')
{ {
echo ' <niveau_code>UNESCO ISCED 7</niveau_code>'; echo ' <niveau_code>UNESCO ISCED 7</niveau_code>';
echo ' <niveau_deutsch>Lehrgang zur Weiterbildung nach §9 FHStG idgF.</niveau_deutsch>'; echo ' <niveau_deutsch>Lehrgang zur Weiterbildung nach §9 FHG idgF.</niveau_deutsch>';
echo ' <niveau_englisch>Certificate Program for Further Education subjected to § 9 FHStG</niveau_englisch>'; echo ' <niveau_englisch>Certificate Program for Further Education subjected to § 9 FHG</niveau_englisch>';
echo ' <zulassungsvoraussetzungen_deutsch><![CDATA[Facheinschlägiger Studienabschluss oder einschlägige Berufserfahrung]]></zulassungsvoraussetzungen_deutsch>'; echo ' <zulassungsvoraussetzungen_deutsch><![CDATA[Facheinschlägiger Studienabschluss oder einschlägige Berufserfahrung]]></zulassungsvoraussetzungen_deutsch>';
echo ' <zulassungsvoraussetzungen_englisch><![CDATA[Appropriate university degree or appropriate work experience]]></zulassungsvoraussetzungen_englisch>'; echo ' <zulassungsvoraussetzungen_englisch><![CDATA[Appropriate university degree or appropriate work experience]]></zulassungsvoraussetzungen_englisch>';
echo ' <anforderungen_deutsch><![CDATA[Das Studium erfordert die positive Absolvierung von Lehrveranstaltungen (Vorlesungen, Übungen, Seminaren, Projekten, integrierten Lehrveranstaltungen) im Ausmaß der laut Studienplan vorgeschriebenen ECTS. Die Ausbildung integriert technische, wirtschaftliche, organisatorische und persönlichkeitsbildende Elemente. Im Rahmen des Master-Lehrgangs ist eine Master Thesis zu verfassen und eine abschließende Prüfung (Masterprüfung) zu absolvieren. Der Lehrgang ist vom Kollegium der FH Technikum Wien genehmigt und der AQ Austria (Kennzahl '.$studiengang_kz.') gemeldet.]]></anforderungen_deutsch>'; echo ' <anforderungen_deutsch><![CDATA[Das Studium erfordert die positive Absolvierung von Lehrveranstaltungen (Vorlesungen, Übungen, Seminaren, Projekten, integrierten Lehrveranstaltungen) im Ausmaß der laut Studienplan vorgeschriebenen ECTS. Die Ausbildung integriert technische, wirtschaftliche, organisatorische und persönlichkeitsbildende Elemente. Im Rahmen des Master-Lehrgangs ist eine Master Thesis zu verfassen und eine abschließende Prüfung (Masterprüfung) zu absolvieren. Der Lehrgang ist vom Kollegium der FH Technikum Wien genehmigt und der AQ Austria (Kennzahl '.$studiengang_kz.') gemeldet.]]></anforderungen_deutsch>';
+4
View File
@@ -119,6 +119,10 @@ foreach($ps->result as $row)
<ROLLE:statusgrund_id><![CDATA['.$row->statusgrund_id.']]></ROLLE:statusgrund_id> <ROLLE:statusgrund_id><![CDATA['.$row->statusgrund_id.']]></ROLLE:statusgrund_id>
<ROLLE:statusgrund><![CDATA['.(isset($statusgrund_arr[$row->statusgrund_id])?$statusgrund_arr[$row->statusgrund_id]:'').']]></ROLLE:statusgrund> <ROLLE:statusgrund><![CDATA['.(isset($statusgrund_arr[$row->statusgrund_id])?$statusgrund_arr[$row->statusgrund_id]:'').']]></ROLLE:statusgrund>
<ROLLE:lehrverband><![CDATA['.$lehrverband.']]></ROLLE:lehrverband> <ROLLE:lehrverband><![CDATA['.$lehrverband.']]></ROLLE:lehrverband>
<ROLLE:insertamum><![CDATA['.$datum->formatDatum($row->insertamum,'d.m.Y H:i:s').']]></ROLLE:insertamum>
<ROLLE:insertvon><![CDATA['.$row->insertvon.']]></ROLLE:insertvon>
<ROLLE:updateamum><![CDATA['.$datum->formatDatum($row->updateamum,'d.m.Y H:i:s').']]></ROLLE:updateamum>
<ROLLE:updatevon><![CDATA['.$row->updatevon.']]></ROLLE:updatevon>
</RDF:Description> </RDF:Description>
</RDF:li> </RDF:li>
'; ';
+2
View File
@@ -939,6 +939,8 @@ if($xmlformat=='rdf')
UPPER(nachname || ' ' || vorname) ~* UPPER(".$db->db_add_param($searchItems_string).") OR UPPER(nachname || ' ' || vorname) ~* UPPER(".$db->db_add_param($searchItems_string).") OR
UPPER(nachname || ' ' || wahlname) ~* UPPER(".$db->db_add_param($searchItems_string).") OR UPPER(nachname || ' ' || wahlname) ~* UPPER(".$db->db_add_param($searchItems_string).") OR
UPPER(wahlname || ' ' || nachname) ~* UPPER(".$db->db_add_param($searchItems_string).") OR UPPER(wahlname || ' ' || nachname) ~* UPPER(".$db->db_add_param($searchItems_string).") OR
UPPER(vorname) ~* UPPER(".$db->db_add_param($searchItems_string).") OR
UPPER(nachname) ~* UPPER(".$db->db_add_param($searchItems_string).") OR
student_uid ~* LOWER(".$db->db_add_param($searchItems_string).")"; student_uid ~* LOWER(".$db->db_add_param($searchItems_string).")";
} }
else else
+3
View File
@@ -31,7 +31,9 @@ require_once('dbupdate_3.4/example2.php');
require_once('dbupdate_3.4/26173_index_webservicelog.php'); require_once('dbupdate_3.4/26173_index_webservicelog.php');
require_once('dbupdate_3.4/24682_reihungstest_zugangscode_fuer_login.php'); require_once('dbupdate_3.4/24682_reihungstest_zugangscode_fuer_login.php');
require_once('dbupdate_3.4/17512_fehlercode_constraints.php'); require_once('dbupdate_3.4/17512_fehlercode_constraints.php');
require_once('dbupdate_3.4/27388_anrechnungen_zeitfenster_pflegen.php');
require_once('dbupdate_3.4/19154_beurteilungsformulare_pruefungssenat.php'); require_once('dbupdate_3.4/19154_beurteilungsformulare_pruefungssenat.php');
require_once('dbupdate_3.4/27949_infocenter_zurueckstellen_mit_grund.php');
// *** Pruefung und hinzufuegen der neuen Attribute und Tabellen // *** Pruefung und hinzufuegen der neuen Attribute und Tabellen
echo '<H2>Pruefe Tabellen und Attribute!</H2>'; echo '<H2>Pruefe Tabellen und Attribute!</H2>';
@@ -146,6 +148,7 @@ $tabellen=array(
"lehre.tbl_anrechnungstatus" => array("status_kurzbz", "bezeichnung_mehrsprachig"), "lehre.tbl_anrechnungstatus" => array("status_kurzbz", "bezeichnung_mehrsprachig"),
"lehre.tbl_anrechnung_anrechnungstatus" => array("anrechnungstatus_id", "anrechnung_id", "status_kurzbz", "datum", "insertamum", "insertvon"), "lehre.tbl_anrechnung_anrechnungstatus" => array("anrechnungstatus_id", "anrechnung_id", "status_kurzbz", "datum", "insertamum", "insertvon"),
"lehre.tbl_anrechnung_begruendung" => array("begruendung_id","bezeichnung"), "lehre.tbl_anrechnung_begruendung" => array("begruendung_id","bezeichnung"),
"lehre.tbl_anrechnungszeitraum" => array("anrechnungszeitraum_id","studiensemester_kurzbz","anrechnungstart","anrechnungende", "insertamum", "insertvon"),
"lehre.tbl_betreuerart" => array("betreuerart_kurzbz","beschreibung","aktiv"), "lehre.tbl_betreuerart" => array("betreuerart_kurzbz","beschreibung","aktiv"),
"lehre.tbl_ferien" => array("bezeichnung","studiengang_kz","vondatum","bisdatum"), "lehre.tbl_ferien" => array("bezeichnung","studiengang_kz","vondatum","bisdatum"),
"lehre.tbl_lehreinheit" => array("lehreinheit_id","lehrveranstaltung_id","studiensemester_kurzbz","lehrfach_id","lehrform_kurzbz","stundenblockung","wochenrythmus","start_kw","raumtyp","raumtypalternativ","sprache","lehre","anmerkung","unr","lvnr","updateamum","updatevon","insertamum","insertvon","ext_id","lehrfach_id_old","gewicht"), "lehre.tbl_lehreinheit" => array("lehreinheit_id","lehrveranstaltung_id","studiensemester_kurzbz","lehrfach_id","lehrform_kurzbz","stundenblockung","wochenrythmus","start_kw","raumtyp","raumtypalternativ","sprache","lehre","anmerkung","unr","lvnr","updateamum","updatevon","insertamum","insertvon","ext_id","lehrfach_id_old","gewicht"),
@@ -0,0 +1,57 @@
<?php
if (! defined('DB_NAME')) exit('No direct script access allowed');
if (!$result = @$db->db_query('SELECT 1 FROM lehre.tbl_anrechnungszeitraum LIMIT 1'))
{
$qry = 'CREATE TABLE lehre.tbl_anrechnungszeitraum
(
anrechnungszeitraum_id integer,
studiensemester_kurzbz varchar(16) NOT NULL,
anrechnungstart date,
anrechnungende date,
insertamum timestamp default NOW(),
insertvon varchar(32)
);
COMMENT ON TABLE lehre.tbl_anrechnungszeitraum IS \'Zeitfenster fuer Anrechnungen pro Studiensemester\';
COMMENT ON COLUMN lehre.tbl_anrechnungszeitraum.anrechnungstart IS \'Zeitfenster Startdatum\';
COMMENT ON COLUMN lehre.tbl_anrechnungszeitraum.anrechnungende IS \'Zeitfenster Enddatum\';
ALTER TABLE lehre.tbl_anrechnungszeitraum ADD CONSTRAINT pk_anrechnungszeitraum PRIMARY KEY (anrechnungszeitraum_id);
ALTER TABLE lehre.tbl_anrechnungszeitraum ADD CONSTRAINT fk_anrechnungszeitraum_studiensemester_kurzbz FOREIGN KEY (studiensemester_kurzbz) REFERENCES public.tbl_studiensemester(studiensemester_kurzbz) ON UPDATE CASCADE ON DELETE RESTRICT;
CREATE SEQUENCE lehre.seq_anrechnungszeitraum_anrechnungszeitraum_id
START WITH 1
INCREMENT BY 1
NO MAXVALUE
NO MINVALUE
CACHE 1;
ALTER TABLE lehre.tbl_anrechnungszeitraum ALTER COLUMN anrechnungszeitraum_id SET DEFAULT nextval(\'lehre.seq_anrechnungszeitraum_anrechnungszeitraum_id\');
GRANT SELECT, UPDATE, INSERT, DELETE ON lehre.tbl_anrechnungszeitraum TO web;
GRANT SELECT, UPDATE, INSERT, DELETE ON lehre.tbl_anrechnungszeitraum TO vilesci;
GRANT SELECT, UPDATE ON lehre.seq_anrechnungszeitraum_anrechnungszeitraum_id TO vilesci;
GRANT SELECT, UPDATE ON lehre.seq_anrechnungszeitraum_anrechnungszeitraum_id TO web;
';
if(!$db->db_query($qry))
echo '<strong>lehre.tbl_anrechnungszeitraum: '.$db->db_last_error().'</strong><br>';
else
echo ' lehre.tbl_anrechnungszeitraum: Tabelle hinzugefuegt<br>';
}
// Add permission to admin Anrechnungen
if($result = @$db->db_query("SELECT 1 FROM system.tbl_berechtigung WHERE berechtigung_kurzbz = 'lehre/anrechnungszeitfenster';"))
{
if($db->db_num_rows($result) == 0)
{
$qry = "INSERT INTO system.tbl_berechtigung(berechtigung_kurzbz, beschreibung) VALUES('lehre/anrechnungszeitfenster', 'Anrechnungszeitfenster anlegen');";
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/anrechnungszeitfenster<br>';
}
}
@@ -0,0 +1,85 @@
<?php
if (! defined('DB_NAME')) exit('No direct script access allowed');
// Add table tbl_rueckstellung_status
if(!$result = @$db->db_query("SELECT 1 FROM public.tbl_rueckstellung_status LIMIT 1;"))
{
$qry = "
CREATE TABLE public.tbl_rueckstellung_status
(
status_kurzbz character varying(32),
bezeichnung_mehrsprachig character varying(256)[],
sort integer,
aktiv boolean default true
);
ALTER TABLE public.tbl_rueckstellung_status ADD CONSTRAINT pk_tbl_postpone_status_status_kurzbz PRIMARY KEY (status_kurzbz);
INSERT INTO public.tbl_rueckstellung_status(status_kurzbz, bezeichnung_mehrsprachig, sort) VALUES('parked', '{Parken, Park}', 1);
INSERT INTO public.tbl_rueckstellung_status(status_kurzbz, bezeichnung_mehrsprachig, sort) VALUES('onhold_bmi', '{Bundesministerium, Federal Ministry}', 2);
INSERT INTO public.tbl_rueckstellung_status(status_kurzbz, bezeichnung_mehrsprachig, sort) VALUES('onhold_zgv', '{ZGV Prüfung, ZGV examination}', 3);
INSERT INTO public.tbl_rueckstellung_status(status_kurzbz, bezeichnung_mehrsprachig, sort) VALUES('onhold_drittstaat', '{Drittstaat, Third country}', 4);
INSERT INTO public.tbl_rueckstellung_status(status_kurzbz, bezeichnung_mehrsprachig, sort) VALUES('onhold_remone', '{Reminder 1, Reminder 1}', 5);
INSERT INTO public.tbl_rueckstellung_status(status_kurzbz, bezeichnung_mehrsprachig, sort) VALUES('onhold_remtwo', '{Reminder 2, Reminder 2}', 6);
GRANT SELECT, INSERT, UPDATE, DELETE ON public.tbl_rueckstellung_status TO vilesci;
GRANT SELECT ON public.tbl_rueckstellung_status TO web;
";
if(!$db->db_query($qry))
echo '<strong>public.tbl_rueckstellung_status: '.$db->db_last_error().'</strong><br>';
else
echo ' public.tbl_rueckstellung_status: Tabelle hinzugefuegt<br>';
}
// Add table tbl_rueckstellung
if(!$result = @$db->db_query("SELECT 1 FROM public.tbl_rueckstellung LIMIT 1;"))
{
$qry = "
CREATE TABLE public.tbl_rueckstellung
(
rueckstellung_id integer NOT NULL,
person_id integer NOT NULL,
status_kurzbz character varying(32) NOT NULL,
datum_bis timestamp NOT NULL,
insertamum timestamp without time zone default now(),
insertvon character varying(32)
);
CREATE SEQUENCE public.tbl_rueckstellung_id_seq
INCREMENT BY 1
NO MAXVALUE
NO MINVALUE
CACHE 1;
ALTER TABLE public.tbl_rueckstellung ADD CONSTRAINT pk_tbl_rueckstellung PRIMARY KEY (rueckstellung_id);
ALTER TABLE public.tbl_rueckstellung ALTER COLUMN rueckstellung_id SET DEFAULT nextval('tbl_rueckstellung_id_seq');
ALTER TABLE public.tbl_rueckstellung ADD CONSTRAINT fk_rueckstellung_person_id FOREIGN KEY (person_id) REFERENCES public.tbl_person(person_id) ON UPDATE CASCADE ON DELETE RESTRICT;
ALTER TABLE public.tbl_rueckstellung ADD CONSTRAINT fk_rueckstellung_status_kurzbz FOREIGN KEY (status_kurzbz) REFERENCES public.tbl_rueckstellung_status(status_kurzbz) ON UPDATE CASCADE ON DELETE RESTRICT;
GRANT SELECT, UPDATE ON public.tbl_rueckstellung_id_seq TO vilesci;
GRANT SELECT, UPDATE ON public.tbl_rueckstellung_id_seq TO web;
GRANT SELECT, INSERT, UPDATE, DELETE ON public.tbl_rueckstellung TO vilesci;
GRANT SELECT, UPDATE, DELETE ON public.tbl_rueckstellung TO web;
";
if(!$db->db_query($qry))
echo '<strong>public.tbl_rueckstellung: '.$db->db_last_error().'</strong><br>';
else
echo ' public.tbl_rueckstellung: Tabelle hinzugefuegt<br>';
//Übernahme von "zurückgestellten" und "geparkten" Personen
$qry = "
INSERT INTO public.tbl_rueckstellung (person_id, status_kurzbz, datum_bis, insertvon)
SELECT person_id,
CASE WHEN
(lower(l.logdata->>'name') = 'onhold')
THEN 'onhold_remone'
ELSE lower(l.logdata->>'name')
END,
zeitpunkt, insertvon
FROM system.tbl_log l
WHERE (l.logdata->>'name' = 'Onhold' OR l.logdata->>'name' = 'Parked') AND zeitpunkt >= NOW();";
if(!$db->db_query($qry))
echo '<strong>public.tbl_rueckstellung: '.$db->db_last_error().'</strong><br>';
else
echo ' public.tbl_rueckstellung: Bestehene Eintraege uebernommen<br>';
}
+6 -3
View File
@@ -40,7 +40,9 @@ $filters = array(
{"name": "User/Operator"}, {"name": "User/Operator"},
{"name": "InfoCenterMitarbeiter"}, {"name": "InfoCenterMitarbeiter"},
{"name": "LockUser"}, {"name": "LockUser"},
{"name": "OnholdDate"} {"name": "HoldDate"},
{"name": "Rueckstellgrund"},
{"name": "Kaution"}
], ],
"filters": [ "filters": [
{ {
@@ -511,13 +513,14 @@ $filters = array(
{ {
"name": "Abgewiesen - Alle", "name": "Abgewiesen - Alle",
"columns": [ "columns": [
{"name": "PersonID"}, {"name": "PersonId"},
{"name": "PreStudentID"}, {"name": "PreStudentID"},
{"name": "Vorname"}, {"name": "Vorname"},
{"name": "Nachname"}, {"name": "Nachname"},
{"name": "Studiengang"}, {"name": "Studiengang"},
{"name": "AbgewiesenAm"}, {"name": "AbgewiesenAm"},
{"name": "Nachricht"} {"name": "Nachricht"},
{"name": "Kaution"}
], ],
"filters": [] "filters": []
} }
+466 -6
View File
@@ -3747,8 +3747,8 @@ $phrases = array(
) )
), ),
array( array(
'app' => 'core', 'app' => 'infocenter',
'category' => 'global', 'category' => 'infocenter',
'phrase' => 'rueckstelldatum', 'phrase' => 'rueckstelldatum',
'insertvon' => 'system', 'insertvon' => 'system',
'phrases' => array( 'phrases' => array(
@@ -3766,6 +3766,26 @@ $phrases = array(
) )
) )
), ),
array(
'app' => 'infocenter',
'category' => 'infocenter',
'phrase' => 'rueckstellgrund',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Rückstellgrund',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'onHold reason',
'description' => '',
'insertvon' => 'system'
)
)
),
array( array(
'app' => 'infocenter', 'app' => 'infocenter',
'category' => 'infocenter', 'category' => 'infocenter',
@@ -4114,6 +4134,26 @@ When on hold, the date is only a reminder.',
) )
) )
), ),
array(
'app' => 'infocenter',
'category' => 'infocenter',
'phrase' => 'kaution',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Kaution',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Deposit',
'description' => '',
'insertvon' => 'system'
)
)
),
array( array(
'app' => 'core', 'app' => 'core',
'category' => 'password', 'category' => 'password',
@@ -11529,6 +11569,86 @@ Any unusual occurrences
) )
) )
), ),
array(
'app' => 'core',
'category' => 'anrechnung',
'phrase' => 'empfehlungNegativKenntnisseNichtGleichwertigWeil',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Die anzurechnenden Kenntnisse sind umfangmäßig und/oder inhaltlich nicht gleichwertig, weil<span id="helpTxtBegruendungErgaenzen">...[Erläuterung: Bitte Begründung ergänzen.]</span>',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'The equivalence in terms of learning objectives and the length of the course can not be determined because of<span id="helpTxtBegruendungErgaenzen">...[Explanation: Please add reason.]</span>',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'anrechnung',
'phrase' => 'empfehlungNegativKenntnisseNichtGleichwertigWeilHinweis',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Die anzurechnenden Kenntnisse sind umfangmäßig und/oder inhaltlich nicht gleichwertig, weil... <span class="text-danger"><b>Bei einer Ablehnung ist eine individuelle Begründung erforderlich. Dies kann nur über die Detailseite erfolgen.</b></span>',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'The equivalence in terms of learning objectives and the length of the course can not be determined because of... <span class="text-danger"><b>If the application is rejected, an individual reason is required. This can only be done from the detail page.</b></span>',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'anrechnung',
'phrase' => 'genehmigungNegativKenntnisseNichtGleichwertigWeil',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Die anzurechnenden Kenntnisse sind umfangmäßig und/oder inhaltlich nicht gleichwertig, weil<span id="helpTxtBegruendungErgaenzen">...[Erläuterung: Bitte ergänzen oder Empfehlungstext des Lektors übernehmen und ggf. redigieren.]</span>',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'The equivalence in terms of learning objectives and the length of the course can not be determined because of<span id="helpTxtBegruendungErgaenzen">...[Explanation: Please complete or adopt the text of the lectors recommendation and edit it if necessary]</span>',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'anrechnung',
'phrase' => 'genehmigungNegativKenntnisseNichtGleichwertigWeilHinweis',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Die anzurechnenden Kenntnisse sind umfangmäßig und/oder inhaltlich nicht gleichwertig, weil... <span class="text-danger"><b>Bei einer Ablehnung ist eine individuelle Begründung erforderlich. Dies kann nur über die Detailseite erfolgen.</b></span>',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'The equivalence in terms of learning objectives and the length of the course can not be determined because of... <span class="text-danger"><b>If the application is rejected, an individual reason is required. This can only be done from the detail page.</b></span>',
'description' => '',
'insertvon' => 'system'
)
)
),
array( array(
'app' => 'core', 'app' => 'core',
'category' => 'anrechnung', 'category' => 'anrechnung',
@@ -11589,6 +11709,26 @@ Any unusual occurrences
) )
) )
), ),
array(
'app' => 'core',
'category' => 'ui',
'phrase' => 'bitteBegruendungVervollstaendigen',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Bitte vervollständigen Sie die Begründung.',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Please complete the reason.',
'description' => '',
'insertvon' => 'system'
)
)
),
array( array(
'app' => 'core', 'app' => 'core',
'category' => 'anrechnung', 'category' => 'anrechnung',
@@ -11617,13 +11757,13 @@ Any unusual occurrences
'phrases' => array( 'phrases' => array(
array( array(
'sprache' => 'German', 'sprache' => 'German',
'text' => 'Andere Begr&uuml;ndung. Bitte im Notizfeld kurz angeben.', 'text' => 'Andere Begründung. Bitte im Notizfeld angeben.',
'description' => '', 'description' => '',
'insertvon' => 'system' 'insertvon' => 'system'
), ),
array( array(
'sprache' => 'English', 'sprache' => 'English',
'text' => 'Other reasons. Please briefly state the reasons in the field for comments.', 'text' => 'Other reasons. Please state the reasons in the field for comments.',
'description' => '', 'description' => '',
'insertvon' => 'system' 'insertvon' => 'system'
) )
@@ -12129,6 +12269,206 @@ Any unusual occurrences
) )
) )
), ),
array(
'app' => 'core',
'category' => 'anrechnung',
'phrase' => 'anrechnungenVerwalten',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Anrechnungen verwalten',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Administration of applications.',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'anrechnung',
'phrase' => 'anrechnungszeitraumFestlegen',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Anrechnungszeitraum festlegen',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Set appplication period',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'anrechnung',
'phrase' => 'anrechnungszeitraumHinzufuegen',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Anrechnungszeitraum hinzufügen',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Add appplication period',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'anrechnung',
'phrase' => 'anrechnungszeitraumSpeichern',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Anrechnungszeitraum speichern',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Save application period',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'anrechnung',
'phrase' => 'anrechnungszeitraumStart',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Anrechnungszeitraum Start',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Startdate application',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'anrechnung',
'phrase' => 'anrechnungszeitraumEnde',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Anrechnungszeitraum Ende',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Enddate application',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'ui',
'phrase' => 'errorStartdatumNichtInStudiensemester',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Das Startdatum liegt außerhalb des gewählten Studiensemesters.',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'The startdate is not within the selected study semester.',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'ui',
'phrase' => 'errorEndedatumNichtInStudiensemester',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Das Endedatum liegt außerhalb des gewählten Studiensemesters.',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'The enddate is not within the selected study semester.',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'ui',
'phrase' => 'errorStartdatumNachEndedatum',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Das Startdatum muss VOR dem Endedatum liegen.',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'The startdate must be BEFORE the enddate.',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'ui',
'phrase' => 'frageSicherLoeschen',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => "Sicher löschen?",
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => "Definitely delete?",
'description' => '',
'insertvon' => 'system'
)
)
),
array( array(
'app' => 'core', 'app' => 'core',
'category' => 'ui', 'category' => 'ui',
@@ -13145,6 +13485,46 @@ array(
) )
) )
), ),
array(
'app' => 'core',
'category' => 'ui',
'phrase' => 'bearbeitetVon',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => "bearbeitet von",
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => "edited by",
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'ui',
'phrase' => 'bearbeitetAm',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => "bearbeitet am",
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => "edited on",
'description' => '',
'insertvon' => 'system'
)
)
),
array( array(
'app' => 'core', 'app' => 'core',
'category' => 'global', 'category' => 'global',
@@ -13193,13 +13573,13 @@ array(
'phrases' => array( 'phrases' => array(
array( array(
'sprache' => 'German', 'sprache' => 'German',
'text' => "Empfehlungstext des Lektors als Begr&uuml;ndung &uuml;bernehmen.", 'text' => "Empfehlungstext des Lektors als Begründung übernehmen und ggf. redigieren.",
'description' => '', 'description' => '',
'insertvon' => 'system' 'insertvon' => 'system'
), ),
array( array(
'sprache' => 'English', 'sprache' => 'English',
'text' => "Copy the lectors recommendation text as reason for the rejection.", 'text' => "Copy the lectors recommendation text as reason for the rejection and edit if necessary",
'description' => '', 'description' => '',
'insertvon' => 'system' 'insertvon' => 'system'
) )
@@ -17363,6 +17743,86 @@ array(
) )
) )
), ),
array(
'app' => 'infocenter',
'category' => 'infocenter',
'phrase' => 'statusSetzen',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Status setzen',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Set state',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'infocenter',
'category' => 'infocenter',
'phrase' => 'abgewiesenam',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Abgewiesen am',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Rejected on',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'infocenter',
'category' => 'infocenter',
'phrase' => 'statusAuswahl',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Status ausw&auml;hlen',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Select status',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'infocenter',
'category' => 'infocenter',
'phrase' => 'statusZuruecksetzen',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Status zur&uuml;cksetzen',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Reset status',
'description' => '',
'insertvon' => 'system'
)
)
),
); );
+3 -1
View File
@@ -160,8 +160,10 @@ $tage_imJahr = $ende_imJahr->diff($beginn_imJahr)->days + 1;
$wochen_imJahr = $tage_imJahr / 7; $wochen_imJahr = $tage_imJahr / 7;
// Sommer- und Wintersemester im BIS Meldungsjahr // Sommer- und Wintersemester im BIS Meldungsjahr
$ss_kurzbz = $studiensemester->getBeforePrevious(); //$ss_kurzbz = $studiensemester->getBeforePrevious();
$ws_kurzbz = $studiensemester->getStudienjahrStudiensemester($stsem); $ws_kurzbz = $studiensemester->getStudienjahrStudiensemester($stsem);
$ss_kurzbz = $studiensemester->getPreviousFrom($ws_kurzbz);
$ss = new studiensemester($ss_kurzbz); $ss = new studiensemester($ss_kurzbz);
$ws = new studiensemester($ws_kurzbz); $ws = new studiensemester($ws_kurzbz);