diff --git a/application/config/navigation.php b/application/config/navigation.php
index 400e414ad..f0880cba1 100644
--- a/application/config/navigation.php
+++ b/application/config/navigation.php
@@ -14,6 +14,7 @@ $config['navigation_header'] = array(
'icon' => 'sitemap',
'description' => 'Organisation',
'sort' => 20,
+ 'requiredPermissions' => 'basis/vilesci:r',
'children'=> array(
'vilesci' => array(
'link' => base_url('vilesci'),
@@ -30,6 +31,7 @@ $config['navigation_header'] = array(
'icon' => 'graduation-cap',
'description' => 'Lehre',
'sort' => 30,
+ 'requiredPermissions' => 'basis/vilesci:r',
'children'=> array(
'cis' => array(
'link' => CIS_ROOT,
@@ -68,6 +70,7 @@ $config['navigation_header'] = array(
'icon' => 'user',
'description' => 'Personen',
'sort' => 40,
+ 'requiredPermissions' => 'basis/vilesci:r',
'children'=> array(
'bpk' => array(
'link' => site_url('person/BPKWartung'),
@@ -156,6 +159,13 @@ $config['navigation_menu']['lehre/lehrauftrag/Lehrauftrag/*'] = array(
'icon' => '',
'sort' => 1,
'requiredPermissions' => 'lehre/lehrauftrag_erteilen:r'
+ ),
+ 'lehrauftragLehrendeÜbersicht' => array(
+ 'link' => site_url('lehre/lehrauftrag/Lehrauftrag/LehrendeUebersicht'),
+ 'description' => 'Lehrendenübersicht',
+ 'icon' => '',
+ 'sort' => 1,
+ 'requiredPermissions' => array('lehre/lehrauftrag_erteilen:r')
)
);
$config['navigation_menu']['lehre/lehrauftrag/LehrauftragErteilen/*'] = array(
diff --git a/application/controllers/jobs/LehrauftragJob.php b/application/controllers/jobs/LehrauftragJob.php
new file mode 100644
index 000000000..2f6b928c7
--- /dev/null
+++ b/application/controllers/jobs/LehrauftragJob.php
@@ -0,0 +1,536 @@
+load->model('accounting/Vertrag_model', 'VertragModel');
+ $this->load->model('accounting/Vertragvertragsstatus_model', 'VertragvertragsstatusModel');
+ $this->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel');
+ $this->load->model('person/Benutzerfunktion_model', 'BenutzerfunktionModel');
+ $this->load->model('system/Benutzerrolle_model', 'BenutzerrolleModel');
+
+ // Load libraries
+ $this->load->library('PermissionLib');
+
+ // Load helpers
+ $this->load->helper('hlp_sancho_helper');
+ }
+
+ /**
+ * This daily job sends information about all lehr-/projektauftraege ordered (and not approved) the day bofore.
+ * Receivers: Department-/Kompetenzfeldleiter
+ **/
+ public function mailLehrauftraegeToApprove()
+ {
+ // Get vertrag_ids of lehrauftraege that had been ordered and had NOT been approved or cancelled YESTERDAY
+ $this->VertragvertragsstatusModel->addSelect('vertrag_id');
+ $result = $this->VertragvertragsstatusModel->getOrdered_fromDate('YESTERDAY');
+
+ // Get lehrveranstaltung_ids and studiensemester of the lehr-/or projektauftrag contracts
+ $lehreinheit_data_arr = array();
+ if ($vertrag_arr = getData($result))
+ {
+ foreach ($vertrag_arr as $vertrag)
+ {
+ $result = $this->VertragModel->getLehreinheitData($vertrag->vertrag_id, 'lehrveranstaltung_id, studiensemester_kurzbz');
+
+ if (hasData($result))
+ {
+ $obj = new StdClass();
+ $obj->lehrveranstaltung_id = $result->retval[0]->lehrveranstaltung_id;
+ $obj->studiensemester_kurzbz = $result->retval[0]->studiensemester_kurzbz;
+ $lehreinheit_data_arr []= $obj;
+ }
+ }
+ }
+
+ /**
+ * Build the data array to be used in the email. Data array is clustered as follows:
+ * Array
+ * [studiensemester_kurzbz] // studiensemester of lehreinheit
+ * Array
+ * [oe_kurzbz] // oe of lehreinheits lehrveranstaltung
+ * [oe_bezeichnung]
+ * Array
+ * [stg_kz] // stg of lehreinheits lehrveranstaltung
+ * [stg_kurzbz]
+ * [stg_bezeichnung]
+ * [amount] // amount of new ordered lehrauftraege of that stg
+ */
+ $data_arr = array();
+ foreach ($lehreinheit_data_arr as $lehreinheit_data)
+ {
+ $result = $this->_getLVData($lehreinheit_data->lehrveranstaltung_id);
+
+ if (hasData($result))
+ {
+ // Search if studiensemester exists in data_arr
+ $ss_index = array_search($lehreinheit_data->studiensemester_kurzbz, array_column($data_arr, 'studiensemester_kurzbz'));
+
+ // If studiensemester is new, add studienesemester, oe and stg
+ if ($ss_index === false)
+ {
+ $data = array(
+ 'studiensemester_kurzbz' => $lehreinheit_data->studiensemester_kurzbz
+ );
+
+ $data []= array(
+ 'oe_kurzbz' => $result->retval[0]->oe_kurzbz,
+ 'oe_bezeichnung' => $result->retval[0]->lv_oe_bezeichnung
+ );
+
+ // Add stg data to oe, start amount with 1
+ $data[0][] = array(
+ 'stg_kz' => $result->retval[0]->studiengang_kz,
+ 'stg_kurzbz' => strtoupper($result->retval[0]->stg_typ. $result->retval[0]->stg_kurzbz),
+ 'stg_bezeichnung' => $result->retval[0]->lv_stg_bezeichnung,
+ 'amount' => 1
+ );
+
+ // Push to final data_arr
+ $data_arr []= $data;
+ }
+ // Else if studiensemester exists
+ else
+ {
+ // Search if oe exists inside existing studiensemester of data_arr
+ $oe_index = array_search($result->retval[0]->oe_kurzbz, array_column($data_arr[$ss_index], 'oe_kurzbz'));
+
+ // If oe is new, add oe and stg to studiensemester
+ if ($oe_index === false)
+ {
+ // Add oe data
+ $data_arr[$ss_index][] = array(
+ 'oe_kurzbz' => $result->retval[0]->oe_kurzbz,
+ 'oe_bezeichnung' => $result->retval[0]->lv_oe_bezeichnung,
+
+ // Add stg data to oe, start amount with 1
+ array(
+ 'stg_kz' => $result->retval[0]->studiengang_kz,
+ 'stg_kurzbz' => strtoupper($result->retval[0]->stg_typ. $result->retval[0]->stg_kurzbz),
+ 'stg_bezeichnung' => $result->retval[0]->lv_stg_bezeichnung,
+ 'amount' => 1
+ )
+ );
+ }
+ // Else if oe exists
+ else
+ {
+ // Search if stg exists inside existing oe of data_arr
+ $stg_index = array_search($result->retval[0]->studiengang_kz, array_column($data_arr[$ss_index][$oe_index], 'stg_kz'));
+
+ // If stg is new, add stg to oe, start amount with 1
+ if ($stg_index === false)
+ {
+ $data_arr[$ss_index][$oe_index][] = array(
+ 'stg_kz' => $result->retval[0]->studiengang_kz,
+ 'stg_kurzbz' => strtoupper($result->retval[0]->stg_typ. $result->retval[0]->stg_kurzbz),
+ 'stg_bezeichnung' => $result->retval[0]->lv_stg_bezeichnung,
+ 'amount' => 1
+ );
+ }
+ // Else if stg exists
+ else
+ {
+ // Increase amount +1
+ $data_arr[$ss_index][$oe_index][$stg_index]['amount']++;
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * Cluster data by uid of entitled mail receivers.
+ * Returning array is clustered as follows:
+ * Array
+ * [uid]
+ * Array
+ * [studiensemester_kurzbz] // studiensemester of lehreinheit
+ * Array
+ * [oe_kurzbz] // oe of lehreinheits lehrveranstaltung
+ * [oe_bezeichnung]
+ * Array
+ * [stg_kz] // stg of lehreinheits lehrveranstaltung
+ * [stg_kurzbz]
+ * [stg_bezeichnung]
+ * [amount] // amount of new ordered lehrauftraege of that stg
+ */
+ $data_arr = $this->_clusterData_byReceiver($data_arr);
+
+ // Send email
+ if(!$this->_sendMail_toApprove($data_arr))
+ {
+ $this->logInfo('SUCCEDED: Sending emails about yesterdays ordered lehrauftraege succeded.');
+ }
+ else
+ {
+ $this->logError('Error when sending emails in job MailLehrauftragToApprove');
+ }
+ }
+
+ /**
+ * This daily job sends information about all lehr-/projektauftraege approved the day bofore.
+ * Receivers: lectors
+ **/
+ public function mailLehrauftraegeToAccept()
+ {
+ // Get vertrag_id and uid of lehrauftraege that had been approved and had NOT been accepted or cancelled YESTERDAY
+ $this->VertragvertragsstatusModel->addSelect('vertrag_id, uid');
+ $this->VertragvertragsstatusModel->addOrder('uid');
+ $result = $this->VertragvertragsstatusModel->getApproved_fromDate('YESTERDAY');
+
+ /**
+ * Build the data array to be used in the email. Data array is clustered as follows:
+ * Array
+ * [uid] // lectors uid (mail receiver)
+ * [studiensemester] // studiensemester of the lehrauftraege (can be more, e.g. 'WS2019 and SS2020')
+ * [amount] // amount of new approved lehrauftraege
+ **/
+ $data_arr = array();
+ if ($vertrag_arr = getData($result))
+ {
+ foreach ($vertrag_arr as $vertrag)
+ {
+ // Get studiensemester of the lehrauftrag
+ $this->VertragModel->addSelect('vertragsstunden_studiensemester_kurzbz');
+ $result = $this->VertragModel->load($vertrag->vertrag_id);
+ if ($studiensemester = getData($result))
+ {
+ $studiensemester = $studiensemester[0]->vertragsstunden_studiensemester_kurzbz;
+ }
+
+ // Search if uid exists in data_arr
+ $uid_index = array_search($vertrag->uid, array_column($data_arr, 'uid'));
+
+ // If uid is new, add uid, studiensemester and start amount with 1
+ if ($uid_index === false)
+ {
+ $data = array();
+ $data['uid'] = $vertrag->uid;
+ $data['studiensemester'] = $studiensemester;
+ $data['amount']= 1;
+ $data_arr []= $data;
+ }
+ // Else if uid exists
+ else
+ {
+ // If studiensemester is new, add to studiensemester-string
+ if (strpos($data_arr[$uid_index]['studiensemester'], $studiensemester) === false)
+ {
+ $data_arr[$uid_index]['studiensemester'] .= ' und '. $studiensemester;
+ }
+
+ // Increase amount +1
+ $data_arr[$uid_index]['amount']++;
+ }
+ }
+ }
+
+ // Send email
+ if ($this->_sendMail_toAccept($data_arr))
+ {
+ $this->logInfo('SUCCEDED: Sending emails about yesterdays approved lehrauftraege succeded.');
+ }
+ else
+ {
+ $this->logError('Error when sending emails in job MailLehrauftragToAccept');
+ }
+ }
+
+ //******************************************************************************************************************
+ // PRIVATE FUNCTIONS
+ //******************************************************************************************************************
+
+ /**
+ * Get data of given lehrveranstaltung.
+ * @param $lehrveranstaltung_id
+ * @return mixed
+ */
+ private function _getLVData($lehrveranstaltung_id)
+ {
+ $this->LehrveranstaltungModel->addSelect('
+ tbl_lehrveranstaltung.oe_kurzbz,
+ oe.bezeichnung AS "lv_oe_bezeichnung",
+ tbl_lehrveranstaltung.studiengang_kz,
+ stg.bezeichnung AS "lv_stg_bezeichnung",
+ stg.typ AS "stg_typ",
+ stg.kurzbz AS "stg_kurzbz"
+ ');
+
+ $this->LehrveranstaltungModel->addJoin('lehre.tbl_studienplan_lehrveranstaltung stpllv', 'lehrveranstaltung_id');
+ $this->LehrveranstaltungModel->addJoin('lehre.tbl_studienplan stpl', 'studienplan_id');
+ $this->LehrveranstaltungModel->addJoin('lehre.tbl_studienordnung sto', 'studienordnung_id');
+ $this->LehrveranstaltungModel->addJoin('public.tbl_studiengang stg', 'ON stg.studiengang_kz = tbl_lehrveranstaltung.studiengang_kz');
+ $this->LehrveranstaltungModel->addJoin('public.tbl_organisationseinheit oe', 'ON oe.oe_kurzbz = tbl_lehrveranstaltung.oe_kurzbz');
+ $this->LehrveranstaltungModel->addOrder('stpllv.insertamum', 'DESC');
+ $this->LehrveranstaltungModel->addLimit(1);
+
+ return $this->LehrveranstaltungModel->load($lehrveranstaltung_id);
+ }
+
+ /**
+ * Send Sancho eMail about ordered Lehrauftraege.
+ * @param $data_arr
+ */
+ private function _sendMail_toApprove($data_arr)
+ {
+ // Loop through 'container' of mail recipients
+ foreach($data_arr as $data)
+ {
+ // Set mail recipients (department assistance/leader)
+ $to = $data['uid']. '@'. DOMAIN;
+ $html_table = $this->_renderData_LehrauftraegeToApprove($data);
+
+ // Prepare mail content
+ $content_data_arr = array(
+ 'table' => $html_table
+ );
+
+ sendSanchoMail(
+ 'LehrauftragNeueBestellungen',
+ $content_data_arr,
+ $to,
+ 'Bestellung neuer Lehraufträge',
+ 'sancho_header_min_bw.jpg',
+ 'sancho_footer_min_bw.jpg'
+ );
+ }
+ }
+
+ /**
+ * Cluster the data array by entitled mail receiver.
+ * Returning array is clustered as follows:
+ * Array
+ * [uid]
+ * Array
+ * [studiensemester_kurzbz] // studiensemester of lehreinheit
+ * Array
+ * [oe_kurzbz] // oe of lehreinheits lehrveranstaltung
+ * [oe_bezeichnung]
+ * Array
+ * [stg_kz] // stg of lehreinheits lehrveranstaltung
+ * [stg_kurzbz]
+ * [stg_bezeichnung]
+ * [amount] // amount of new ordered lehrauftraege of that stg
+ * @param $data_arr
+ * @return array
+ *
+ */
+ private function _clusterData_byReceiver($data_arr)
+ {
+ $mail_data_arr = array(); // final array with all data clustered by mail receiver
+
+ // Loop through 'container' of studiensemester
+ foreach ($data_arr as $data)
+ {
+ $data_len = count($data) - 1;
+
+ // Loop through 'container' of organisational units
+ for ($i = 0; $i < $data_len; $i++)
+ {
+ // Get all users entitled by organisational unit
+ $result = $this->BenutzerrolleModel->getBenutzerByBerechtigung(self::BERECHTIGUNG_LEHRAUFTRAG_ERTEILEN, $data[$i]['oe_kurzbz']);
+
+ if ($berechtigung_arr = getData($result))
+ {
+ // Loop through entitled users
+ foreach ($berechtigung_arr as $berechtigung)
+ {
+ // Search if UID exists inside mail_data_arr
+ $uid_index = array_search($berechtigung->uid, array_column($mail_data_arr, 'uid'));
+
+ // If UID is new, add UID to final array
+ if ($uid_index === false)
+ {
+ // add UID with corresponding data
+ $mail_data_arr [] = array(
+ 'uid' => $berechtigung->uid,
+ array(
+ 'studiensemester_kurzbz' => $data['studiensemester_kurzbz'],
+ $data[$i]
+ )
+ );
+ } // Else if UID exists
+ else
+ {
+ // Search if studiensemester exists
+ $ss_index = array_search($data['studiensemester_kurzbz'], array_column($mail_data_arr, 'studiensemester_kurzbz'));
+
+ // If studiensemester is new, add studiensemester to existing UID
+ if ($ss_index === false)
+ {
+ $mail_data_arr[$uid_index] []= array(
+ 'studiensemester_kurzbz' => $data['studiensemester_kurzbz'],
+ $data[$i]
+ );
+ }
+ // Else if studiensemester exists
+ else
+ {
+ // Add corresponding data to existing studiensemester of UID
+ $mail_data_arr[$uid_index]['studiensemester_kurbz'][] = $data[$i];
+ }
+
+ }
+ }
+ }
+ }
+ }
+
+ return $mail_data_arr;
+ }
+
+ /**
+ * Render the data array for the mail template returing a HTML table.
+ * @param $data_arr Data to be used in HTML table
+ * @return string HTML table to be embedded in eMail
+ */
+ private function _renderData_LehrauftraegeToApprove($data_arr)
+ {
+ $html = '';
+ foreach ($data_arr as $studiensemester_container)
+ {
+ if (is_array($studiensemester_container)) // is_array 'trims' the outer associative key [uid]
+ {
+ if (isset($studiensemester_container['studiensemester_kurzbz']))
+ {
+ $studiensemester = $studiensemester_container['studiensemester_kurzbz'];
+
+ // Link to LehrauftragErteilen
+ $url = site_url(self::LEHRAUFTRAG_ERTEILEN_URI).'?studiensemester='. $studiensemester;
+ }
+
+ // HTML table header
+ $html .= '
+
+ Studiensemester: '. $studiensemester. '
+
+
+
+
+ LV-Organisationseinheit
+ Studiengang
+ STG-Kurzbezeichnung
+ Anzahl neu bestellter Lehraufträge
+
+
+ '
+ ;
+
+ // HTML table body
+ foreach ($studiensemester_container as $oe_container)
+ {
+ if (is_array($oe_container)) // is_array 'trims' the outer associative key [studiensemester_kurzbz]
+ {
+ if (isset($oe_container['oe_bezeichnung']))
+ {
+ $oe_bezeichnung = $oe_container['oe_bezeichnung'];
+ }
+
+ foreach ($oe_container as $stg_data)
+ {
+ if (is_array($stg_data)) // is_array 'trims' the outer associative keys [oe_kurzbz] and [oe_bezeichnung]
+ {
+ $html .= '
+
+ '. $oe_bezeichnung. '
+ '. $stg_data['stg_bezeichnung']. '
+ '. $stg_data['stg_kurzbz']. '
+ '. $stg_data['amount']. '
+
+ ';
+ }
+ }
+ }
+ }
+
+ // HTML table body end and link
+ $html .= '
+
+
+
+ '. anchor($url, 'Lehraufträge Übersicht '. $studiensemester). '
+
+ ';
+ }
+ }
+
+ return $html;
+ }
+
+ /**
+ * Send Sancho eMail about ordered Lehrauftraege.
+ * @param $data_arr
+ */
+ private function _sendMail_toAccept($data_arr)
+ {
+ // Loop through 'container' of mail recipients
+ foreach($data_arr as $data)
+ {
+ // Set mail recipient (lector)
+ $to = $data['uid']. '@'. DOMAIN;
+
+ // Link to LehrauftragAkzeptieren
+ $url = CIS_ROOT. 'cis/index.php?menu='.
+ CIS_ROOT. 'cis/menu.php?content_id=&content='.
+ CIS_ROOT. index_page(). self::LEHRAUFTRAG_AKZEPTIEREN_URI;
+
+ // Get first name
+ $first_name = '';
+ $this->load->model('person/Benutzer_model', 'BenutzerModel');
+ $this->BenutzerModel->addSelect('vorname');
+ $this->BenutzerModel->addJoin('public.tbl_person', 'person_id');
+ $result = $this->BenutzerModel->loadWhere(array('uid' => $data['uid']));
+
+ if (hasData($result))
+ {
+ $first_name = $result->retval[0]->vorname;
+ }
+
+ // Prepare mail content
+ $content_data_arr = array(
+ 'vorname' => $first_name,
+ 'studiensemester' => $data['studiensemester'],
+ 'anzahl' => $data['amount'],
+ 'link' => anchor($url, 'Lehraufträge Übersicht')
+ );
+
+ sendSanchoMail(
+ 'LehrauftragNeueErteilte',
+ $content_data_arr,
+ $to,
+ 'Neu erteilte Lehraufträge zum Annehmen bereit'
+ );
+ }
+ }
+}
diff --git a/application/controllers/lehre/lehrauftrag/Lehrauftrag.php b/application/controllers/lehre/lehrauftrag/Lehrauftrag.php
index 70c054186..db20b6897 100644
--- a/application/controllers/lehre/lehrauftrag/Lehrauftrag.php
+++ b/application/controllers/lehre/lehrauftrag/Lehrauftrag.php
@@ -26,7 +26,8 @@ class Lehrauftrag extends Auth_Controller
array(
'index' => 'lehre/lehrauftrag_bestellen:r',
'orderLehrauftrag' => 'lehre/lehrauftrag_bestellen:rw',
- 'Dashboard' => array('lehre/lehrauftrag_bestellen:r', 'lehre/lehrauftrag_erteilen:rw')
+ 'Dashboard' => array('lehre/lehrauftrag_bestellen:r', 'lehre/lehrauftrag_erteilen:rw'),
+ 'LehrendeUebersicht' => array('lehre/lehrauftrag_erteilen:r')
)
);
@@ -69,6 +70,14 @@ class Lehrauftrag extends Auth_Controller
$this->load->view('lehre/lehrauftrag/Dashboard.php');
}
+ /**
+ * Display of Lehrauftragsübersicht report
+ */
+ public function LehrendeUebersicht()
+ {
+ $this->load->view('lehre/lehrauftrag/LehrendeUebersicht.php');
+ }
+
// -----------------------------------------------------------------------------------------------------------------
// Public methods
/**
@@ -220,12 +229,6 @@ class Lehrauftrag extends Auth_Controller
{
$this->outputJsonSuccess($json);
}
-
- // Send email to Mitarbeiter
- // if(!$this->_sendMail($new_lehrvertrag_data_arr)) // TODO: slows down Bestell-process -> better chronjob?
- {
- // return error information // TODO: implement after decision regarding communication process
- }
}
// -----------------------------------------------------------------------------------------------------------------
@@ -320,41 +323,4 @@ class Lehrauftrag extends Auth_Controller
return $unique_new_lehrvertrag_data_arr;
}
-
- private function validateGetPost($lehrauftrag){
- $lehreinheit_id = (isset($lehrauftrag['lehreinheit_id']) && is_numeric($lehrauftrag['lehreinheit_id'])) ? $lehrauftrag['lehreinheit_id'] : null;
- $lehrveranstaltung_id = (isset($lehrauftrag['lehrveranstaltung_id']) && is_numeric($lehrauftrag['lehrveranstaltung_id'])) ? $lehrauftrag['lehrveranstaltung_id'] : null;
- $person_id = (isset($lehrauftrag['person_id']) && is_numeric($lehrauftrag['person_id'])) ? $lehrauftrag['person_id'] : null;
- $mitarbeiter_uid = (isset($lehrauftrag['mitarbeiter_uid']) && is_string($lehrauftrag['mitarbeiter_uid'])) ? $lehrauftrag['mitarbeiter_uid'] : null;
- $vertrag_id = (isset($lehrauftrag['vertrag_id']) && is_numeric($lehrauftrag['vertrag_id'])) ? $lehrauftrag['vertrag_id'] : null;
- $projektarbeit_id = (isset($lehrauftrag['projektarbeit_id']) && is_numeric($lehrauftrag['projektarbeit_id'])) ? $lehrauftrag['projektarbeit_id'] : null;
- $stunden = (isset($lehrauftrag['stunden']) && is_numeric($lehrauftrag['stunden'])) ? $lehrauftrag['stunden'] : null;
- $betrag = (isset($lehrauftrag['betrag']) && is_numeric($lehrauftrag['betrag'])) ? $lehrauftrag['betrag'] : null;
- $studiensemester_kurzbz = (isset($lehrauftrag['studiensemester_kurzbz']) && is_string($lehrauftrag['studiensemester_kurzbz'])) ? $lehrauftrag['betrag'] : null;
-
- return array(
- $lehreinheit_id,
- $lehrveranstaltung_id,
- $person_id,
- $mitarbeiter_uid,
- $vertrag_id,
- $projektarbeit_id,
- $stunden,
- $betrag,
- $studiensemester_kurzbz
- );
-
-// LIST IS TO BE SET ABOVE!!!:
-// list(
-// $lehreinheit_id,
-// $lehrveranstaltung_id,
-// $person_id,
-// $mitarbeiter_uid,
-// $vertrag_id,
-// $projektarbeit_id,
-// $stunden,
-// $betrag,
-// $studiensemester_kurzbz
-// ) = $this->_validateGetPost($lehrauftrag);
- }
}
diff --git a/application/controllers/lehre/lehrauftrag/LehrauftragAkzeptieren.php b/application/controllers/lehre/lehrauftrag/LehrauftragAkzeptieren.php
index 8ed9aa320..31e2ffb31 100644
--- a/application/controllers/lehre/lehrauftrag/LehrauftragAkzeptieren.php
+++ b/application/controllers/lehre/lehrauftrag/LehrauftragAkzeptieren.php
@@ -168,9 +168,9 @@ class LehrauftragAkzeptieren extends Auth_Controller
/**
* Check if lectors latest active Verwendung has inkludierte Lehre
- * - inkludierte_lehre is null: freelancer lector -> has NO inkludierte Lehre
- * - inkludierte_lehre -1: fix employed lector -> all inclusive Lehre
- * - inkludierte_lehre > 0: fix employed lector -> given value is inclusive Lehre
+ * - inkludierte_lehre is null OR 0: freelancer lector -> has NO inkludierte Lehre
+ * - inkludierte_lehre -1: fix employed lector -> has inkludierte Lehre (all inclusive)
+ * - inkludierte_lehre > 0: fix employed lector -> has inkludierte Lehre (value is amount of hours included)
*/
public function checkInkludierteLehre()
{
@@ -178,7 +178,7 @@ class LehrauftragAkzeptieren extends Auth_Controller
if (hasData($result))
{
- $this->outputJsonSuccess(!is_null($result->retval[0]->inkludierte_lehre));
+ $this->outputJsonSuccess(!is_null($result->retval[0]->inkludierte_lehre) && $result->retval[0]->inkludierte_lehre != 0);
}
else
{
diff --git a/application/controllers/system/Navigation.php b/application/controllers/system/Navigation.php
index 1abf7d9a8..190f84acd 100644
--- a/application/controllers/system/Navigation.php
+++ b/application/controllers/system/Navigation.php
@@ -7,7 +7,7 @@ if (! defined('BASEPATH')) exit('No direct script access allowed');
* Provides data to the ajax get calls about the filter
* This controller works with JSON calls on the HTTP GET or POST and the output is always JSON
*/
-class Navigation extends Auth_Controller
+class Navigation extends FHC_Controller
{
const NAVIGATION_PAGE_PARAM = 'navigation_page'; // Navigation page parameter name
@@ -16,12 +16,9 @@ class Navigation extends Auth_Controller
*/
public function __construct()
{
- parent::__construct(
- array(
- 'menu' => 'basis/vilesci:r',
- 'header' => 'basis/vilesci:r'
- )
- );
+ parent::__construct();
+
+ $this->load->library('AuthLib');
$this->_loadNavigationLib(); // Loads the NavigationLib with parameters
}
diff --git a/application/libraries/AuthLib.php b/application/libraries/AuthLib.php
index bb2c6ce9b..c5345a250 100644
--- a/application/libraries/AuthLib.php
+++ b/application/libraries/AuthLib.php
@@ -378,7 +378,7 @@ class AuthLib
}
else // otherwise
{
- $hta = $this->_createAuthObjByPerson(array('uid' => $_SERVER['PHP_AUTH_USER']));
+ $hta = $this->_createAuthObjByPerson(array('uid' => trim($_SERVER['PHP_AUTH_USER'])));
}
// Invalid credentials
@@ -390,7 +390,7 @@ class AuthLib
}
elseif (isError($hta)) // display error and stop execution
{
- $this->_showError(getData($hta));
+ $this->_showError($hta->retval);
}
return $hta; // if success then is returned!
@@ -574,10 +574,11 @@ class AuthLib
// Needed information
$this->_ci->PersonModel->addSelect('person_id, vorname, nachname, uid');
- // Retrieves the uid if it is possible
- $this->_ci->PersonModel->addJoin('public.tbl_benutzer', 'person_id', 'LEFT');
-
- $queryParamsArray['tbl_person.aktiv'] = true; // only active users!
+ // Retrieves the uid if it is possible for active users
+ $this->_ci->PersonModel->addJoin(
+ '(SELECT uid, person_id FROM public.tbl_benutzer WHERE aktiv = TRUE) tb', 'person_id',
+ 'LEFT'
+ );
// Execute query with where clause
$personResult = $this->_ci->PersonModel->loadWhere($queryParamsArray);
diff --git a/application/models/accounting/Vertragvertragsstatus_model.php b/application/models/accounting/Vertragvertragsstatus_model.php
index 7e76ef494..c2bd9cc7d 100644
--- a/application/models/accounting/Vertragvertragsstatus_model.php
+++ b/application/models/accounting/Vertragvertragsstatus_model.php
@@ -130,5 +130,61 @@ class Vertragvertragsstatus_model extends DB_Model
);
}
-
+ /**
+ * Get all contracts, where the status had been set to 'bestellt' on given date
+ * @param string $string_date e.g. '01.11.2019' or special Date/Time inputs like 'YESTERDAY', 'TODAY', 'NOW'
+ * @param bool $further_processed If true, ALL ordered contracts of that day are retrieved, even if they were
+ * were ALSO approved/accepted/cancelled (further processed) on that same day.
+ * @return array
+ */
+ public function getOrdered_fromDate($string_date = 'TODAY', $further_processed = false)
+ {
+ $condition = '
+ vertragsstatus_kurzbz = \'bestellt\' AND
+ (datum)::date = date \''. $string_date .'\'
+ ';
+
+ if (!$further_processed)
+ {
+ $condition .= '
+ AND
+ vertrag_id NOT IN (
+ SELECT vertrag_id
+ FROM lehre.tbl_vertrag_vertragsstatus
+ WHERE vertragsstatus_kurzbz IN (\'erteilt\', \'akzeptiert\', \'storno\')
+ )
+ ';
+ }
+
+ return $this->loadWhere($condition);
+ }
+
+ /**
+ * Get all contracts, where the status had been set to 'erteilt' on given date
+ * @param string $string_date e.g. '01.11.2019' or special Date/Time inputs like 'YESTERDAY', 'TODAY', 'NOW'
+ * @param bool $further_processed If true, ALL contracts approved on that day are retrieved, even if they were
+ * were ALSO accepted/cancelled (further processed) on that same day.
+ * @return array
+ */
+ public function getApproved_fromDate($string_date = 'TODAY', $further_processed = false)
+ {
+ $condition = '
+ vertragsstatus_kurzbz = \'erteilt\' AND
+ (datum)::date = date \''. $string_date .'\'
+ ';
+
+ if (!$further_processed)
+ {
+ $condition .= '
+ AND
+ vertrag_id NOT IN (
+ SELECT vertrag_id
+ FROM lehre.tbl_vertrag_vertragsstatus
+ WHERE vertragsstatus_kurzbz IN (\'akzeptiert\', \'storno\')
+ )
+ ';
+ }
+
+ return $this->loadWhere($condition);
+ }
}
diff --git a/application/models/person/Benutzerfunktion_model.php b/application/models/person/Benutzerfunktion_model.php
index 30abfdf51..ceb427687 100644
--- a/application/models/person/Benutzerfunktion_model.php
+++ b/application/models/person/Benutzerfunktion_model.php
@@ -48,7 +48,7 @@ class Benutzerfunktion_model extends DB_Model
if (is_string($funktion_kurzbz))
{
- $query .= " AND funktion_kurzbz = ".$funktion_kurzbz.")";
+ $query .= " AND funktion_kurzbz = '".$funktion_kurzbz."'";
}
elseif (is_array($funktion_kurzbz) && count($funktion_kurzbz) > 0)
{
diff --git a/application/models/system/Benutzerrolle_model.php b/application/models/system/Benutzerrolle_model.php
index 5ce96a622..765ad9bd4 100644
--- a/application/models/system/Benutzerrolle_model.php
+++ b/application/models/system/Benutzerrolle_model.php
@@ -11,7 +11,7 @@ class Benutzerrolle_model extends DB_Model
$this->dbTable = 'system.tbl_benutzerrolle';
$this->pk = 'benutzerberechtigung_id';
}
-
+
/**
* Checks if the given user is an admin
*/
@@ -19,9 +19,9 @@ class Benutzerrolle_model extends DB_Model
{
// Join with the table tbl_benutzer
$this->addJoin('public.tbl_benutzer', 'uid');
-
+
$result = $this->loadWhere(array('person_id' => $person_id, 'rolle_kurzbz' => 'admin'));
-
+
if (!isError($result))
{
if (hasData($result))
@@ -33,25 +33,35 @@ class Benutzerrolle_model extends DB_Model
$result = success(false);
}
}
-
+
return $result;
}
- /**
- * Get user who are authorized with berechtigung and, if given, authorized for the specific organisational unit.
- * @param $berechtigung_kurzbz
- * @param null $oe_kurzbz
- * @return array
- */
- public function getBenutzerByBerechtigung($berechtigung_kurzbz, $oe_kurzbz = null){
+ /**
+ * Get user who are authorized with berechtigung and, if given, authorized for the specific organisational unit.
+ * @param $berechtigung_kurzbz
+ * @param null $oe_kurzbz
+ * @return array
+ */
+ public function getBenutzerByBerechtigung($berechtigung_kurzbz, $oe_kurzbz = null)
+ {
+ $params = array();
+ $query = '
+ SELECT
+ *
+ FROM
+ system.vw_berechtigung_nichtrekursiv
+ WHERE
+ berechtigung_kurzbz = ?';
- $condition = array('berechtigung_kurzbz' => $berechtigung_kurzbz);
+ $params[] = $berechtigung_kurzbz;
- if (is_string($oe_kurzbz))
- {
- $condition['oe_kurzbz'] = $oe_kurzbz;
- }
+ if (!is_null($oe_kurzbz))
+ {
+ $query .= ' AND oe_kurzbz = ?';
+ $params[] = $oe_kurzbz;
+ }
- return $this->loadWhere($condition);
- }
-}
\ No newline at end of file
+ return $this->execQuery($query, $params);
+ }
+}
diff --git a/application/models/system/Variablenname_model.php b/application/models/system/Variablenname_model.php
index ada1d330c..7b2a2cf88 100644
--- a/application/models/system/Variablenname_model.php
+++ b/application/models/system/Variablenname_model.php
@@ -27,7 +27,7 @@ class Variablenname_model extends DB_Model
/**
* Gets defaults for user variables.
* If no default value present in table, SQL can be executed for retrieving the value.
- * @param null $names optionally get only defaults for certain variables
+ * @param $names optionally get only defaults for certain variables
* @return array
*/
public function getDefaults($names = null)
@@ -36,13 +36,13 @@ class Variablenname_model extends DB_Model
$qry = "SELECT name, defaultwert FROM public.tbl_variablenname";
- if (isset($names) && is_array($names))
+ if (!isEmptyArray($names))
{
- $qry .= " WHERE name IN ('".implode(',', $names)."')";
+ $qry .= " WHERE name IN ?";
}
$qry .= ";";
- $defaultsres = $this->execQuery($qry);
+ $defaultsres = $this->execQuery($qry, array('name' => $names));
if (hasData($defaultsres))
{
diff --git a/application/views/lehre/lehrauftrag/LehrendeUebersicht.php b/application/views/lehre/lehrauftrag/LehrendeUebersicht.php
new file mode 100644
index 000000000..1ad295392
--- /dev/null
+++ b/application/views/lehre/lehrauftrag/LehrendeUebersicht.php
@@ -0,0 +1,39 @@
+load->view(
+ 'templates/FHC-Header',
+ array(
+ 'title' => 'Lehrauftrag bestellen',
+ 'jquery' => true,
+ 'bootstrap' => true,
+ 'fontawesome' => true,
+ 'sbadmintemplate' => true,
+ 'ajaxlib' => true,
+ 'navigationwidget' => true,
+ )
+);
+?>
+
+
+widgetlib->widget('NavigationWidget'); ?>
+
+
+
+load->view('templates/FHC-Footer'); ?>
diff --git a/application/views/lehre/lehrauftrag/acceptLehrauftrag.php b/application/views/lehre/lehrauftrag/acceptLehrauftrag.php
index 951dbfadf..14ebacecb 100644
--- a/application/views/lehre/lehrauftrag/acceptLehrauftrag.php
+++ b/application/views/lehre/lehrauftrag/acceptLehrauftrag.php
@@ -14,7 +14,6 @@ $this->load->view(
'ajaxlib' => true,
'dialoglib' => true,
'tablewidget' => true,
- 'navigationwidget' => true,
'phrases' => array(
'global' => array('lehrauftraegeAnnehmen'),
),
@@ -48,23 +47,64 @@ $this->load->view(
Wie nehme ich Lehraufträge an?
-
Sobald Ihnen ein oder mehrere Lehraufträge erteilt wurden, können Sie diese annehmen.
Klicken Sie unten auf das Status-Icon 'Nur erteilte anzeigen' oder 'Alle anzeigen'
- Wählen Sie einzelne Lehraufträge mit Klick auf die Zeilen oder alle über den Button 'Alle auswählen'.
+ Wählen Sie die Lehraufträge, die Sie annehmen möchten, selbst oder alle über den Button 'Alle auswählen'.
Geben Sie Ihr CIS-Passwort ein und klicken auf Lehrauftrag annehmen.
-
+
Warum kann ich manche Lehraufträge nicht auswählen?
-
Nur Lehraufträge mit dem Status 'erteilt' können gewählt werden.
Angenommene Lehraufträge oder Lehraufträge in Bearbeitung werden nur zu Ihrer Information angezeigt.
-
+
+
+
Filter
+
+
+
+
+
+
+
+
+
+
+ Alle Alle Lehraufträge mit jedem Status
+ Bestellt Nur bestellte UND bestellte Lehraufträge, die in Bearbeitung sind
+ Erteilt Nur erteilte UND geänderte Lehraufträge, die in Bearbeitung sind
+ Angenommen Nur von Ihnen angenommene Lehraufträge
+
+
+
+
+
+
+
Auswahl
+
+
+ Einzeln auswählen: Strg + Klick auf einzelne Zeile(n)
+ Bereich auswählen: Shift + Klick auf Anfangs- und Endzeile
+ Alle auswählen: Button 'Alle auswählen'
+
+
+
+
+
Ansicht
+
+
Spaltenbreite verändern
+
+ Um die Spaltenbreite zu verändern, fährt man im Spaltenkopf langsam mit dem Mauszeiger auf
+ den rechten Rand der entprechenden Spalte.
+ Sobald sich der Mauszeiger in einen Doppelpfeil verwandelt, wird die Maustaste geklickt und
+ mit gedrückter Maustaste die Spalte nach rechts erweitert oder nach links verkleinert.
+
+
+
@@ -92,7 +132,7 @@ $this->load->view(
-
+
load->view('lehre/lehrauftrag/acceptLehrauftragData.php'); ?>
@@ -105,11 +145,24 @@ $this->load->view(
@@ -121,7 +174,28 @@ $this->load->view(
-
+
+
+
+
+
+
+
+ p->t('global', 'stornierteLehrauftraege')); ?>:
+
+
+
+
+
+
+
+
+ load->view('lehre/lehrauftrag/cancelledLehrauftragData.php'); ?>
+
+
+
+
+
diff --git a/application/views/lehre/lehrauftrag/acceptLehrauftragData.php b/application/views/lehre/lehrauftrag/acceptLehrauftragData.php
index 0c6bc6ad6..27a348ae7 100644
--- a/application/views/lehre/lehrauftrag/acceptLehrauftragData.php
+++ b/application/views/lehre/lehrauftrag/acceptLehrauftragData.php
@@ -15,11 +15,11 @@ SELECT
studiensemester_kurzbz,
studiengang_kz,
stg_typ_kurzbz,
+ semester,
orgform_kurzbz,
person_id,
typ,
auftrag,
- semester,
lv_oe_kurzbz,
gruppe,
stunden,
@@ -305,11 +305,11 @@ $filterWidgetArray = array(
'Studiensemester',
'Studiengang-KZ',
'Studiengang',
+ 'Semester',
'OrgForm',
'Person-ID',
'Typ',
- 'Auftrag',
- 'Semester',
+ 'LV- / Projektbezeichnung',
'Organisationseinheit',
'Gruppe',
'Stunden',
@@ -330,6 +330,7 @@ $filterWidgetArray = array(
layout: "fitColumns", // fit columns to width of table
responsiveLayout: "hide", // hide columns that dont fit on the table
movableColumns: true, // allows changing column
+ placeholder: func_placeholder(),
headerFilterPlaceholder: " ",
index: "row_index", // assign specific column as unique id (important for row indexing)
selectable: true, // allow row selection
@@ -366,17 +367,17 @@ $filterWidgetArray = array(
studiensemester_kurzbz: {visible: false},
studiengang_kz: {visible: false},
stg_typ_kurzbz: {headerFilter:"input", width: "5%"},
+ semester: {headerFilter:"input"},
orgform_kurzbz: {headerFilter:"input"},
person_id: {visible: false},
typ: {headerFilter:"input", width: "7%"},
- auftrag: {headerFilter:"input", width: "23%"},
- semester: {headerFilter:"input"},
- lv_oe_kurzbz: {headerFilter:"input", width: "12%"},
+ auftrag: {headerFilter:"input", width: "15%"},
+ lv_oe_kurzbz: {headerFilter:"input", width: "8%"},
gruppe: {headerFilter:"input", width: "5%"},
stunden: {align:"right", formatter: form_formatNulltoStringNumber, formatterParams:{precision:1},
headerFilter:"input", headerFilterFunc: hf_filterStringnumberWithOperator,
bottomCalc:"sum", bottomCalcParams:{precision:1}, width: "5%"},
- betrag: {align:"right", formatter: form_formatNulltoStringNumber,
+ betrag: {align:"right", width: "6%", formatter: form_formatNulltoStringNumber,
headerFilter:"input", headerFilterFunc: hf_filterStringnumberWithOperator,
bottomCalc:"sum", bottomCalcParams:{precision:2}, bottomCalcFormatter:"money", bottomCalcFormatterParams:{decimal: ",", thousand: ".", symbol:"€"},
width: "8%"},
@@ -384,9 +385,9 @@ $filterWidgetArray = array(
vertrag_stunden: {visible: false},
vertrag_betrag: {visible: false},
mitarbeiter_uid: {visible: false},
- bestellt: {align:"center", headerFilter:"input", mutator: mut_formatStringDate, tooltip: bestellt_tooltip},
- erteilt: {align:"center", headerFilter:"input", mutator: mut_formatStringDate, tooltip: erteilt_tooltip},
- akzeptiert: {align:"center", headerFilter:"input", mutator: mut_formatStringDate, tooltip: akzeptiert_tooltip},
+ bestellt: {align:"center", headerFilter:"input", mutator: mut_formatStringDate, tooltip: bestellt_tooltip, width: "8%"},
+ erteilt: {align:"center", headerFilter:"input", mutator: mut_formatStringDate, tooltip: erteilt_tooltip, width: "8%"},
+ akzeptiert: {align:"center", headerFilter:"input", mutator: mut_formatStringDate, tooltip: akzeptiert_tooltip, width: "8%"},
bestellt_von: {visible: false},
erteilt_von: {visible: false},
akzeptiert_von: {visible: false}
diff --git a/application/views/lehre/lehrauftrag/approveLehrauftrag.php b/application/views/lehre/lehrauftrag/approveLehrauftrag.php
index 61cdd124d..f36ae7dc7 100644
--- a/application/views/lehre/lehrauftrag/approveLehrauftrag.php
+++ b/application/views/lehre/lehrauftrag/approveLehrauftrag.php
@@ -116,7 +116,7 @@ $this->load->view(
Bestellt Nur bestellte UND geänderte bestellte Lehraufträge
Erteilt Nur erteilte UND geänderte erteilte Lehraufträge
Angenommen Nur vom Lehrenden angenommene Lehraufträge
- Geändert Nur geänderte Lehraufträge, die den Status 'bestellt' oder 'erteilt' haben
+ Geändert Nur Lehraufträge, die geändert wurden, nachdem sie bereits bestellt oder erteilt worden sind
Dummies Nur Lehraufträge, die mit einem Dummylektor angelegt sind
@@ -133,6 +133,18 @@ $this->load->view(
+ Ansicht
+
+
Spaltenbreite verändern
+
+ Um die Spaltenbreite zu verändern, fährt man im Spaltenkopf langsam mit dem Mauszeiger auf
+ den rechten Rand der entprechenden Spalte.
+ Sobald sich der Mauszeiger in einen Doppelpfeil verwandelt, wird die Maustaste geklickt und
+ mit gedrückter Maustaste die Spalte nach rechts erweitert oder nach links verkleinert.
+
+
+
+
diff --git a/application/views/lehre/lehrauftrag/approveLehrauftragData.php b/application/views/lehre/lehrauftrag/approveLehrauftragData.php
index 90090a566..fbc30db1c 100644
--- a/application/views/lehre/lehrauftrag/approveLehrauftragData.php
+++ b/application/views/lehre/lehrauftrag/approveLehrauftragData.php
@@ -16,11 +16,11 @@ SELECT
studiensemester_kurzbz,
studiengang_kz,
stg_typ_kurzbz,
+ semester,
orgform_kurzbz,
person_id,
typ,
auftrag,
- semester,
lv_oe_kurzbz,
gruppe,
lektor,
@@ -147,7 +147,7 @@ FROM
WHEN oe.organisationseinheittyp_kurzbz = \'Department\' THEN (\'DEP \' || oe.bezeichnung)
ELSE (oe.organisationseinheittyp_kurzbz || \' \' || oe.bezeichnung)
END AS "lv_oe_kurzbz",
- (person.vorname || \' \' || person.nachname) AS "lektor",
+ (person.nachname || \' \' || person.vorname) AS "lektor",
TRUNC(lema.semesterstunden, 1) AS "stunden",
TRUNC((lema.semesterstunden * lema.stundensatz), 2) AS "betrag",
vertrag_id,
@@ -267,7 +267,7 @@ FROM
ELSE (oe.organisationseinheittyp_kurzbz ||
\' \' || oe.bezeichnung)
END AS "lv_oe_kurzbz",
- (vorname || \' \' || nachname) AS "lektor",
+ (nachname || \' \' || vorname) AS "lektor",
TRUNC(pb.stunden, 1) AS "stunden",
TRUNC((pb.stunden * pb.stundensatz), 2) AS "betrag",
vertrag_id,
@@ -315,11 +315,11 @@ $filterWidgetArray = array(
'Studiensemester',
'Studiengang-KZ',
'Studiengang',
+ 'Semester',
'OrgForm',
'Person-ID',
'Typ',
- 'Auftrag',
- 'Semester',
+ 'LV- / Projektbezeichnung',
'Organisationseinheit',
'Gruppe',
'Lektor',
@@ -341,6 +341,7 @@ $filterWidgetArray = array(
layout: "fitColumns", // fit columns to width of table
responsiveLayout: "hide", // hide columns that dont fit on the table
movableColumns: true, // allows changing column
+ placeholder: func_placeholder(),
headerFilterPlaceholder: " ",
groupBy:"lehrveranstaltung_id",
groupToggleElement:"header", //toggle group on click anywhere in the group header
@@ -385,28 +386,28 @@ $filterWidgetArray = array(
projektarbeit_id: {visible: false},
studiensemester_kurzbz: {headerFilter:"input"},
studiengang_kz: {visible: false},
- stg_typ_kurzbz: {visible: false},
+ stg_typ_kurzbz: {headerFilter:"input", width: "5%"},
+ semester: {headerFilter:"input"},
orgform_kurzbz: {headerFilter:"input"},
person_id: {visible: false},
typ: {headerFilter:"input"},
auftrag: {headerFilter:"input", width:"20%"},
- semester: {headerFilter:"input"},
lv_oe_kurzbz: {headerFilter:"input"},
gruppe: {headerFilter:"input"},
- lektor: {headerFilter:"input"},
+ lektor: {headerFilter:"input", widthGrow: 3},
stunden: {align:"right", formatter: form_formatNulltoStringNumber, formatterParams:{precision:1},
headerFilter:"input", headerFilterFunc: hf_filterStringnumberWithOperator,
bottomCalc:"sum", bottomCalcParams:{precision:1}},
- betrag: {align:"right", formatter: form_formatNulltoStringNumber,
+ betrag: {align:"right", width: "8%", formatter: form_formatNulltoStringNumber,
headerFilter:"input", headerFilterFunc: hf_filterStringnumberWithOperator,
bottomCalc:"sum", bottomCalcParams:{precision:2}, bottomCalcFormatter:"money", bottomCalcFormatterParams:{decimal: ",", thousand: ".", symbol:"€"}},
vertrag_id: {visible: false},
vertrag_stunden: {visible: false},
vertrag_betrag: {visible: false},
mitarbeiter_uid: {visible: false},
- bestellt: {align:"center", headerFilter:"input", mutator: mut_formatStringDate, tooltip: bestellt_tooltip},
- erteilt: {align:"center", headerFilter:"input", mutator: mut_formatStringDate, tooltip: erteilt_tooltip},
- akzeptiert: {align:"center", headerFilter:"input", mutator: mut_formatStringDate, tooltip: akzeptiert_tooltip},
+ bestellt: {align:"center", headerFilter:"input", mutator: mut_formatStringDate, tooltip: bestellt_tooltip, width: "8%"},
+ erteilt: {align:"center", headerFilter:"input", mutator: mut_formatStringDate, tooltip: erteilt_tooltip, width: "8%"},
+ akzeptiert: {align:"center", headerFilter:"input", mutator: mut_formatStringDate, tooltip: akzeptiert_tooltip, width: "8%"},
bestellt_von: {visible: false},
erteilt_von: {visible: false},
akzeptiert_von: {visible: false},
diff --git a/application/views/lehre/lehrauftrag/cancelledLehrauftragData.php b/application/views/lehre/lehrauftrag/cancelledLehrauftragData.php
new file mode 100644
index 000000000..04d314636
--- /dev/null
+++ b/application/views/lehre/lehrauftrag/cancelledLehrauftragData.php
@@ -0,0 +1,105 @@
+ $query,
+ 'tableUniqueId' => 'cancelledLehrauftrag',
+ 'requiredPermissions' => 'lehre/lehrauftrag_akzeptieren',
+ 'datasetRepresentation' => 'tabulator',
+ 'reloadDataset' => true, // reload query on page refresh
+ 'columnsAliases' => array( // TODO: use phrasen
+ 'Status',
+ 'Studiensemester',
+ 'Typ',
+ 'LV- / Projektbezeichnung',
+ 'Stunden',
+ 'Betrag',
+ 'Storniert am'
+ ),
+ 'datasetRepOptions' => '{
+ layout: "fitColumns", // fit columns to width of table
+ responsiveLayout: "hide", // hide columns that dont fit on the table
+ movableColumns: true, // allows changing column
+ placeholder: func_placeholder(),
+ rowFormatter:function(row){
+ func_rowFormatter(row);
+ },
+ selectableCheck: function(row){
+ return func_selectableCheck(row);
+ },
+ renderComplete:function(){
+ func_renderComplete(this);
+ },
+ tableBuilt: function(){
+ func_tableBuilt(this);
+ }
+ }', // tabulator properties
+ 'datasetRepFieldsDefs' => '{
+ vertrag_id: {visible: false},
+ vertragsstunden_studiensemester_kurzbz: {visible: false},
+ vertragstyp_kurzbz: {widthGrow: 2},
+ bezeichnung: {widthGrow: 2},
+ vertragsstunden: {
+ align:"right", formatter: form_formatNulltoStringNumber, formatterParams:{precision:1},
+ bottomCalc:"sum", bottomCalcParams:{precision:1}
+ },
+ betrag: {
+ align:"right", formatter: form_formatNulltoStringNumber,
+ bottomCalc:"sum", bottomCalcParams:{precision:2}, bottomCalcFormatter:"money", bottomCalcFormatterParams:{decimal: ",", thousand: ".", symbol:"€"}
+ },
+ storniert: {align:"center", mutator: mut_formatStringDate, tooltip: storniert_tooltip},
+ storniert_von: {visible: false},
+ letzterStatus_vorStorniert: {visible: false}
+ }', // col properties
+);
+
+echo $this->widgetlib->widget('TableWidget', $tableWidgetArray);
+
+?>
diff --git a/application/views/lehre/lehrauftrag/orderLehrauftrag.php b/application/views/lehre/lehrauftrag/orderLehrauftrag.php
index abcb3dbc4..b04aa7985 100644
--- a/application/views/lehre/lehrauftrag/orderLehrauftrag.php
+++ b/application/views/lehre/lehrauftrag/orderLehrauftrag.php
@@ -86,6 +86,7 @@ $this->load->view(
Geänderte Lehraufträge
Im FAS können Änderungen an Stunden/Stundensatz eines Lehrauftrags durchgeführt werden, solange dieser nicht vom Lehrenden angenommen wurde.
+ Diese müssen dann erneut bestellt werden.
Wenn Änderungen an bereits bestellten oder erteilten Lehraufträgen vorgenommen wurden, werden diese in einem tooltip angezeigt.
Fahren Sie dazu mit der Maus über dem Status-Icon am Beginn der Zeile.
@@ -117,7 +118,7 @@ $this->load->view(
Bestellt Nur bestellte UND geänderte bestellte Lehraufträge
Erteilt Nur erteilte UND geänderte erteilte Lehraufträge
Angenommen Nur vom Lehrenden angenommene Lehraufträge
- Geändert Nur geänderte Lehraufträge, die den Status 'bestellt' oder 'erteilt' haben
+ Geändert Nur Lehraufträge, die geändert wurden, nachdem sie bereits bestellt oder erteilt worden sind
Dummies Nur Lehraufträge, die mit einem Dummylektor angelegt sind
@@ -134,6 +135,18 @@ $this->load->view(
+ Ansicht
+
+
Spaltenbreite verändern
+
+ Um die Spaltenbreite zu verändern, fährt man im Spaltenkopf langsam mit dem Mauszeiger auf
+ den rechten Rand der entprechenden Spalte.
+ Sobald sich der Mauszeiger in einen Doppelpfeil verwandelt, wird die Maustaste geklickt und
+ mit gedrückter Maustaste die Spalte nach rechts erweitert oder nach links verkleinert.
+
+
+
+
diff --git a/application/views/lehre/lehrauftrag/orderLehrauftragData.php b/application/views/lehre/lehrauftrag/orderLehrauftragData.php
index a5326c0b8..b2fa3ac2f 100644
--- a/application/views/lehre/lehrauftrag/orderLehrauftragData.php
+++ b/application/views/lehre/lehrauftrag/orderLehrauftragData.php
@@ -16,11 +16,41 @@ SELECT
studiensemester_kurzbz,
studiengang_kz,
stg_typ_kurzbz,
+ semester,
+ /* get valid STPL(s), to which the lehrveranstaltung is assigned to (can be more) */
+ /* therefore join over lv, studiensemester and semester */
+ (
+ SELECT
+ string_agg(bezeichnung, \', \')
+ FROM (
+ SELECT stpl.bezeichnung
+ FROM lehre.tbl_studienplan stpl
+ JOIN lehre.tbl_studienplan_semester stplsem USING (studienplan_id)
+ JOIN lehre.tbl_studienplan_lehrveranstaltung stpllv USING (studienplan_id)
+ JOIN lehre.tbl_lehrveranstaltung lv USING (lehrveranstaltung_id)
+ JOIN lehre.tbl_lehreinheit le USING (lehrveranstaltung_id)
+ WHERE
+ /* join over lv of the le */
+ le.lehreinheit_id = auftraege.lehreinheit_id
+ AND stpl.aktiv
+ /* then restrict on stpl of les studiensemester */
+ AND stplsem.studiensemester_kurzbz = le.studiensemester_kurzbz
+ /* then restrict on stpl of lvs semester*/
+ AND stplsem.semester = stpllv.semester
+ /* then restrict on most recent inserted studienplan of the lv */
+ AND studienplan_id = (
+ SELECT stpllv.studienplan_id
+ FROM lehre.tbl_studienplan_lehrveranstaltung
+ WHERE lehrveranstaltung_id = lv.lehrveranstaltung_id
+ ORDER BY insertamum DESC
+ LIMIT 1
+ )
+ ) AS tmp_stpl
+ ) AS "studienplan_bezeichnung",
orgform_kurzbz,
person_id,
typ,
auftrag,
- semester,
lv_oe_kurzbz,
gruppe,
lektor,
@@ -148,7 +178,7 @@ FROM
WHEN oe.organisationseinheittyp_kurzbz = \'Department\' THEN (\'DEP \' || oe.bezeichnung)
ELSE (oe.organisationseinheittyp_kurzbz || \' \' || oe.bezeichnung)
END AS "lv_oe_kurzbz",
- (person.vorname || \' \' || person.nachname) AS "lektor",
+ (person.nachname || \' \' || person.vorname) AS "lektor",
TRUNC(lema.semesterstunden, 1) AS "stunden",
lema.stundensatz,
TRUNC((lema.semesterstunden * lema.stundensatz), 2) AS "betrag",
@@ -269,7 +299,7 @@ FROM
ELSE (oe.organisationseinheittyp_kurzbz ||
\' \' || oe.bezeichnung)
END AS "lv_oe_kurzbz",
- (vorname || \' \' || nachname) AS "lektor",
+ (nachname || \' \' || vorname) AS "lektor",
TRUNC(pb.stunden, 1) AS "stunden",
pb.stundensatz,
TRUNC((pb.stunden * pb.stundensatz), 2) AS "betrag",
@@ -317,11 +347,12 @@ $filterWidgetArray = array(
'Studiensemester',
'Studiengang-KZ',
'Studiengang',
+ 'Semester',
+ 'Studienplan',
'OrgForm',
'Person-ID',
'Typ',
- 'Auftrag',
- 'Semester',
+ 'LV- / Projektbezeichnung',
'Organisationseinheit',
'Gruppe',
'Lektor',
@@ -344,6 +375,7 @@ $filterWidgetArray = array(
layout:"fitColumns", // fit columns to width of table
responsiveLayout:"hide", // hide columns that dont fit on the table
movableColumns: true, // allows changing column
+ placeholder: func_placeholder(),
headerFilterPlaceholder: " ",
groupBy:"lehrveranstaltung_id",
groupToggleElement:"header", //toggle group on click anywhere in the group header
@@ -389,20 +421,21 @@ $filterWidgetArray = array(
projektarbeit_id: {visible: false},
studiensemester_kurzbz: {headerFilter:"input"},
studiengang_kz: {visible: false},
- stg_typ_kurzbz: {visible: false},
+ stg_typ_kurzbz: {headerFilter:"input", width: "5%"},
+ semester: {headerFilter:"input"},
+ studienplan_bezeichnung: {headerFilter:"input", width: "7%"},
orgform_kurzbz: {headerFilter:"input"},
person_id: {visible: false},
typ: {headerFilter:"input"},
- auftrag: {headerFilter:"input", width:"20%"},
- semester: {headerFilter:"input"},
+ auftrag: {headerFilter:"input", width:"15%"},
lv_oe_kurzbz: {headerFilter:"input"},
gruppe: {headerFilter:"input"},
- lektor: {headerFilter:"input"},
+ lektor: {headerFilter:"input", widthGrow: 3},
stunden: {align:"right", formatter: form_formatNulltoStringNumber, formatterParams:{precision:1},
headerFilter:"input", headerFilterFunc: hf_filterStringnumberWithOperator,
bottomCalc:"sum", bottomCalcParams:{precision:1}},
stundensatz: {visible: false},
- betrag: {align:"right", formatter: form_formatNulltoStringNumber,
+ betrag: {align:"right", width: "8%", formatter: form_formatNulltoStringNumber,
headerFilter:"input", headerFilterFunc: hf_filterStringnumberWithOperator,
bottomCalc:"sum", bottomCalcParams:{precision:2}, bottomCalcFormatter:"money",
bottomCalcFormatterParams:{decimal: ",", thousand: ".", symbol:"€"}},
@@ -410,12 +443,12 @@ $filterWidgetArray = array(
vertrag_stunden: {visible: false},
vertrag_betrag: {visible: false},
mitarbeiter_uid: {visible: false},
- bestellt: {align:"center", headerFilter:"input", mutator: mut_formatStringDate, tooltip: bestellt_tooltip},
- erteilt: {align:"center", headerFilter:"input", mutator: mut_formatStringDate, tooltip: erteilt_tooltip},
- akzeptiert: {align:"center", headerFilter:"input", mutator: mut_formatStringDate, tooltip: akzeptiert_tooltip},
+ bestellt: {align:"center", headerFilter:"input", mutator: mut_formatStringDate, tooltip: bestellt_tooltip, width: "8%"},
+ erteilt: {align:"center", headerFilter:"input", mutator: mut_formatStringDate, tooltip: erteilt_tooltip, width: "8%"},
+ akzeptiert: {align:"center", headerFilter:"input", mutator: mut_formatStringDate, tooltip: akzeptiert_tooltip, width: "8%"},
bestellt_von: {visible: false},
erteilt_von: {visible: false},
- akzeptiert_von: {visible: false},
+ akzeptiert_von: {visible: false}
}', // col properties
);
diff --git a/content/lvplanung/lehrveranstaltungDBDML.php b/content/lvplanung/lehrveranstaltungDBDML.php
index 2b3090221..d506f0459 100644
--- a/content/lvplanung/lehrveranstaltungDBDML.php
+++ b/content/lvplanung/lehrveranstaltungDBDML.php
@@ -693,8 +693,11 @@ if(!$error)
//Lehreinheitmitarbeiterzuteilung loeschen
if(isset($_POST['lehreinheit_id']) && is_numeric($_POST['lehreinheit_id']) && isset($_POST['mitarbeiter_uid']))
{
- // Wenn der Mitarbeiter schon einen Vertrag hat, wird das Loeschen verhindert
- if (isset($_POST['vertrag_id']) && is_numeric($_POST['vertrag_id']))
+ // Wenn der Mitarbeiter schon einen Vertrag hat UND
+ // der config Eintrag zum Anzeigen der Vertragsdetails true ist,
+ // wird das Loeschen verhindert
+ if (isset($_POST['vertrag_id']) && is_numeric($_POST['vertrag_id']) &&
+ (defined('FAS_LV_LEKTORINNENZUTEILUNG_VERTRAGSDETAILS_ANZEIGEN') && FAS_LV_LEKTORINNENZUTEILUNG_VERTRAGSDETAILS_ANZEIGEN))
{
$return = false;
$errormsg = 'Löschen nur nach Stornierung des Vertrags möglich.';
diff --git a/content/lvplanung/lehrveranstaltungnotenoverlay.xul.php b/content/lvplanung/lehrveranstaltungnotenoverlay.xul.php
index d9cdaa49b..55fd91bfd 100644
--- a/content/lvplanung/lehrveranstaltungnotenoverlay.xul.php
+++ b/content/lvplanung/lehrveranstaltungnotenoverlay.xul.php
@@ -1,325 +1,330 @@
-,
- * Andreas Oesterreicher and
- * Rudolf Hangl .
- */
-
-header("Cache-Control: no-cache");
-header("Cache-Control: post-check=0, pre-check=0",false);
-header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
-header("Pragma: no-cache");
-header("Content-type: application/vnd.mozilla.xul+xml");
-require_once('../../config/vilesci.config.inc.php');
-require_once('../../config/global.config.inc.php');
-
-
-if(defined('CIS_GESAMTNOTE_PUNKTE') && CIS_GESAMTNOTE_PUNKTE)
- $punktehidden = 'false';
-else
- $punktehidden = 'true';
-
-echo '';
-
-echo "";
-?>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-';
-}
-?>
-
-
+,
+ * Andreas Oesterreicher and
+ * Rudolf Hangl .
+ */
+
+header("Cache-Control: no-cache");
+header("Cache-Control: post-check=0, pre-check=0",false);
+header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
+header("Pragma: no-cache");
+header("Content-type: application/vnd.mozilla.xul+xml");
+require_once('../../config/vilesci.config.inc.php');
+require_once('../../config/global.config.inc.php');
+
+
+if(defined('CIS_GESAMTNOTE_PUNKTE') && CIS_GESAMTNOTE_PUNKTE)
+ $punktehidden = 'false';
+else
+ $punktehidden = 'true';
+
+echo '';
+
+echo "";
+?>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+';
+}
+?>
+
+
diff --git a/content/lvplanung/lehrveranstaltungoverlay.js.php b/content/lvplanung/lehrveranstaltungoverlay.js.php
index 38091a33f..fef975304 100644
--- a/content/lvplanung/lehrveranstaltungoverlay.js.php
+++ b/content/lvplanung/lehrveranstaltungoverlay.js.php
@@ -43,6 +43,10 @@ var lehrveranstaltungLvGesamtNotenSelectUID=null; //LehreinheitID des Noten Eint
var lehrveranstaltungNotenTreeloaded=false;
var lehrveranstaltungGesamtNotenTreeloaded=false;
var LehrveranstaltungAusbildungssemesterFilter='';
+
+// Config-Eintrag, ob Vertragsdetails angezeigt werden sollen
+var lehrveranstaltung_vertragsdetails_anzeigen = Boolean();
+
// ********** Observer und Listener ************* //
// ****
@@ -1331,12 +1335,9 @@ function LeMitarbeiterAuswahl()
document.getElementById('lehrveranstaltung-lehreinheitmitarbeiter-checkbox-bismelden').checked=false;
var gesamtkosten = LeMitarbeiterGesamtkosten();
-
- // Prüfe ob Vertragsdetails angezeigt werden
- var vertragsdetails_anzeigen = new Boolean();
-
+
// Wenn Vertragsdetails angezeigt werden
- if (vertragsdetails_anzeigen) {
+ if (lehrveranstaltung_vertragsdetails_anzeigen) {
// Reset attributes
document.getElementById('lehrveranstaltung-lehreinheitmitarbeiter-label-vertragsstatus').setAttribute("style", "font-weight: normal");
@@ -2427,7 +2428,7 @@ function LehrveranstaltungFFZertifikatPrint(event)
}
}
var ss = getStudiensemester();
- col = tree.columns ? tree.columns["lehrveranstaltung-noten-tree-studiengang_kz"] : "lehrveranstaltung-noten-tree-studiengang_kz";
+ col = tree.columns ? tree.columns["lehrveranstaltung-noten-tree-lv_studiengang_kz"] : "lehrveranstaltung-noten-tree-lv_studiengang_kz";
stg_kz = tree.view.getCellText(tree.currentIndex,col);
if (event.shiftKey)
diff --git a/content/student/studentDBDML.php b/content/student/studentDBDML.php
index e1234fc76..3de4dbb46 100644
--- a/content/student/studentDBDML.php
+++ b/content/student/studentDBDML.php
@@ -4041,7 +4041,8 @@ if(!$error)
else
{
// Wenn der Projektbetreuer schon einen Vertrag hat, wird das Loeschen verhindert
- if (isset($_POST['vertrag_id']) && is_numeric($_POST['vertrag_id']))
+ if (isset($_POST['vertrag_id']) && is_numeric($_POST['vertrag_id']) &&
+ (defined('FAS_STUDIERENDE_PROJEKTARBEIT_VERTRAGSDETAILS_ANZEIGEN') && FAS_STUDIERENDE_PROJEKTARBEIT_VERTRAGSDETAILS_ANZEIGEN))
{
$return = false;
$errormsg = 'Löschen nur nach Stornierung des Vertrags möglich.';
diff --git a/content/student/studentprojektarbeit.js.php b/content/student/studentprojektarbeit.js.php
index 765f3738c..ab284808e 100644
--- a/content/student/studentprojektarbeit.js.php
+++ b/content/student/studentprojektarbeit.js.php
@@ -31,7 +31,9 @@ var StudentProjektbetreuerTreeDatasource=null; //Datasource des Projektbetreuer
var StudentProjektbetreuerSelectPersonID=null;
var StudentProjektbetreuerSelectProjektarbeitID=null;
var StudentProjektbetreuerSelectBetreuerartKurzbz=null;
-vertragsdetails_anzeigen = new Boolean();
+
+// Config-Eintrag, ob Vertragsdetails angezeigt werden sollen
+var projektarbeit_vertragsdetails_anzeigen = Boolean();
// ********** Observer und Listener ************* //
@@ -117,7 +119,7 @@ var StudentProjektbetreuerTreeListener =
//ohne dem setTimeout
window.setTimeout(StudentProjektbetreuerTreeSelectID,10);
- if(vertragsdetails_anzeigen)
+ if(projektarbeit_vertragsdetails_anzeigen)
{
var mindEinVertragExistiert = StudentProjektbetreuer_VertragExistiert();
@@ -181,10 +183,9 @@ function StudentProjektarbeitTreeLoad(uid)
tree.builder.addListener(StudentProjektarbeitTreeListener);
StudentProjektarbeitDisableFields(false);
- var vertragsdetails_anzeigen = new Boolean();
-
+
// Wenn Vertragsdetails angezeigt werden
- if (vertragsdetails_anzeigen) {
+ if (projektarbeit_vertragsdetails_anzeigen) {
//Reset attributes
document.getElementById('student-projektbetreuer-label-vertragsstatus').value = '';
document.getElementById('student-projektbetreuer-label-vertragsstunden').value = '';
@@ -891,12 +892,9 @@ function StudentProjektbetreuerAuswahl()
document.getElementById('student-projektbetreuer-checkbox-neu').checked=false;
var gesamtkosten = StudentProjektbetreuerGesamtkosten();
-
- // Prüfe ob Vertragsdetails angezeigt werden
- var vertragsdetails_anzeigen = new Boolean();
-
+
// Wenn Vertragsdetails angezeigt werden
- if (vertragsdetails_anzeigen) {
+ if (projektarbeit_vertragsdetails_anzeigen) {
//Reset attributes
document.getElementById('student-projektbetreuer-label-vertragsstatus').setAttribute("style", "font-weight: normal");
document.getElementById('student-projektbetreuer-button-vertrag-stornieren').setAttribute("tooltiptext",
diff --git a/public/js/lehre/lehrauftrag/acceptLehrauftrag.js b/public/js/lehre/lehrauftrag/acceptLehrauftrag.js
index ea96a8c7c..03c72e2f2 100644
--- a/public/js/lehre/lehrauftrag/acceptLehrauftrag.js
+++ b/public/js/lehre/lehrauftrag/acceptLehrauftrag.js
@@ -17,7 +17,7 @@ const COLOR_LIGHTGREY = "#f5f5f5";
const ICON_LEHRAUFTRAG_ORDERED = ' ';
const ICON_LEHRAUFTRAG_APPROVED = ' ';
const ICON_LEHRAUFTRAG_CHANGED = ' ';
-
+const ICON_LEHRAUFTRAG_CANCELLED = ' ';
// -----------------------------------------------------------------------------------------------------------------
// Mutators - setter methods to manipulate table data when entering the tabulator
@@ -26,11 +26,11 @@ const ICON_LEHRAUFTRAG_CHANGED = ' , >=, !=, ==, compare values with that operator
- var operator = '';
- if (headerValue.match(/([<=>!]{1,2})/g)) {
- var operator_arr = headerValue.match(/([<=>!]{1,2})/g);
- operator = operator_arr[0];
+ // If string starts with <, <=, >, >=, !=, ==, compare values with that operator
+ var operator = '';
+ if (headerValue.match(/([<=>!]{1,2})/g)) {
+ var operator_arr = headerValue.match(/([<=>!]{1,2})/g);
+ operator = operator_arr[0];
- headerValue = headerValue
- .replace(operator, '')
- .trim()
- ;
+ headerValue = headerValue
+ .replace(operator, '')
+ .trim()
+ ;
- // return if value comparison is true
- return eval(rowValue + operator + headerValue);
- }
+ // return if value comparison is true
+ return eval(rowValue + operator + headerValue);
+ }
- // If just a stringnumber, return if exact match found
- return parseFloat(rowValue) == headerValue;
+ // If just a stringnumber, return if exact match found
+ return parseFloat(rowValue) == headerValue;
}
// -----------------------------------------------------------------------------------------------------------------
// Tabulator table format functions
// -----------------------------------------------------------------------------------------------------------------
+// Displays text when table is empty
+function func_placeholder()
+{
+ return "Keine Daten vorhanden. ";
+}
+
// Formats the rows
function func_rowFormatter(row){
- var bestellt = row.getData().bestellt;
- var erteilt = row.getData().erteilt;
- var akzeptiert = row.getData().akzeptiert;
+ var bestellt = row.getData().bestellt;
+ var erteilt = row.getData().erteilt;
+ var akzeptiert = row.getData().akzeptiert;
- var stunden = parseFloat(row.getData().stunden);
- var vertrag_stunden = parseFloat(row.getData().vertrag_stunden);
+ var stunden = parseFloat(row.getData().stunden);
+ var vertrag_stunden = parseFloat(row.getData().vertrag_stunden);
- var betrag = parseFloat(row.getData().betrag);
- var vertrag_betrag = parseFloat(row.getData().vertrag_betrag);
+ var betrag = parseFloat(row.getData().betrag);
+ var vertrag_betrag = parseFloat(row.getData().vertrag_betrag);
- if (isNaN(betrag))
- {
- betrag = 0;
- }
+ if (isNaN(betrag))
+ {
+ betrag = 0;
+ }
- /*
- Formats the color of the rows depending on their status
- - orange: geaendert
- - default: bestellte und erteilte (= zu akzeptierende)
- - green: akzeptierte
- - grey: all other (marks unselectable)
- */
- row.getCells().forEach(function(cell){
- if (bestellt != null && (betrag != vertrag_betrag) ||
- bestellt != null && stunden != vertrag_stunden)
- {
- cell.getElement().classList.add('bg-warning'); // geaenderte
- }
- else if(bestellt != null && erteilt != null && akzeptiert == null)
- {
- return; // bestellte + erteilte
- }
- else if(bestellt != null && erteilt != null && akzeptiert != null)
- {
- cell.getElement().classList.add('bg-success') // akzeptierte
- }
- else
- {
- row.getElement().style["background-color"] = COLOR_LIGHTGREY; // default
- }
- });
+ /*
+ Formats the color of the rows depending on their status
+ - orange: geaendert
+ - default: bestellte und erteilte (= zu akzeptierende)
+ - green: akzeptierte
+ - grey: all other (marks unselectable)
+ */
+ row.getCells().forEach(function(cell){
+ if (bestellt != null && (betrag != vertrag_betrag) ||
+ bestellt != null && stunden != vertrag_stunden)
+ {
+ cell.getElement().classList.add('bg-warning'); // geaenderte
+ }
+ else if(bestellt != null && erteilt != null && akzeptiert == null)
+ {
+ return; // bestellte + erteilte
+ }
+ else if(bestellt != null && erteilt != null && akzeptiert != null)
+ {
+ cell.getElement().classList.add('bg-success') // akzeptierte
+ }
+ else
+ {
+ row.getElement().style["background-color"] = COLOR_LIGHTGREY; // default
+ }
+ });
}
// Formats row selectable/unselectable
function func_selectableCheck(row){
- var stunden = parseFloat(row.getData().stunden);
- var vertrag_stunden = parseFloat(row.getData().vertrag_stunden);
+ var stunden = parseFloat(row.getData().stunden);
+ var vertrag_stunden = parseFloat(row.getData().vertrag_stunden);
- var betrag = parseFloat(row.getData().betrag);
- var vertrag_betrag = parseFloat(row.getData().vertrag_betrag);
+ var betrag = parseFloat(row.getData().betrag);
+ var vertrag_betrag = parseFloat(row.getData().vertrag_betrag);
- if (isNaN(betrag))
- {
- betrag = 0;
- }
+ var is_storniert = row.getData().storniert != undefined;
- // only allow to select bestellte && erteilte && nicht geaenderte Lehraufträge
- return row.getData().bestellt != null && // bestellt
- row.getData().erteilt != null && // AND erteilt
- row.getData().akzeptiert == null && // AND nicht akzeptiert
- betrag == vertrag_betrag &&
- stunden == vertrag_stunden; // OR nicht geaenderte
+ if (isNaN(betrag))
+ {
+ betrag = 0;
+ }
+
+ // only allow to select bestellte && erteilte && nicht geaenderte Lehraufträge
+ return row.getData().bestellt != null && // bestellt
+ row.getData().erteilt != null && // AND erteilt
+ row.getData().akzeptiert == null && // AND nicht akzeptiert
+ betrag == vertrag_betrag &&
+ stunden == vertrag_stunden && // AND nicht geaendert
+ !is_storniert; // AND nicht storniert
}
// Adds column status
function func_tableBuilt(table) {
- // Add status column to table
- table.addColumn(
- {
- title: " ",
- field: "status",
- width:40,
- align:"center",
- downloadTitle: 'Status',
- formatter: status_formatter,
- tooltip: status_tooltip
- }, true
- );
+ // Add status column to table
+ table.addColumn(
+ {
+ title: " ",
+ field: "status",
+ width:40,
+ align:"center",
+ downloadTitle: 'Status',
+ formatter: status_formatter,
+ tooltip: status_tooltip
+ }, true
+ );
}
// Sets status values into column status
function func_renderStarted(table){
- // Set literally status to each row - this enables sorting by status despite using icons
- table.getRows().forEach(function(row){
- var bestellt = row.getData().bestellt;
- var erteilt = row.getData().erteilt;
- var akzeptiert = row.getData().akzeptiert;
+ // Set literally status to each row - this enables sorting by status despite using icons
+ table.getRows().forEach(function(row){
+ var bestellt = row.getData().bestellt;
+ var erteilt = row.getData().erteilt;
+ var akzeptiert = row.getData().akzeptiert;
- var stunden = parseFloat(row.getData().stunden);
- var vertrag_stunden = parseFloat(row.getData().vertrag_stunden);
+ var stunden = parseFloat(row.getData().stunden);
+ var vertrag_stunden = parseFloat(row.getData().vertrag_stunden);
- var betrag = parseFloat(row.getData().betrag);
- var vertrag_betrag = parseFloat(row.getData().vertrag_betrag);
+ var betrag = parseFloat(row.getData().betrag);
+ var vertrag_betrag = parseFloat(row.getData().vertrag_betrag);
- if (isNaN(betrag))
- {
- betrag = 0;
- }
+ if (isNaN(betrag))
+ {
+ betrag = 0;
+ }
- if ((bestellt != null && betrag != vertrag_betrag) ||
- (bestellt != null && stunden != vertrag_stunden))
- {
- row.getData().status = 'Geändert'; // geaendert
- }
- else if (bestellt == null && erteilt == null && akzeptiert == null)
- {
- row.getData().status = 'Neu'; // neu
- }
- else if (bestellt != null && erteilt == null && akzeptiert == null)
- {
- row.getData().status = 'Bestellt'; // bestellt
- }
- else if (bestellt != null && erteilt != null && akzeptiert == null)
- {
- row.getData().status = 'Erteilt'; // erteilt
- }
- else if (bestellt != null && erteilt != null && akzeptiert != null)
- {
- row.getData().status = 'Akzeptiert'; // akzeptiert
- }
- else
- {
- row.getData().status = null; // default
- }
- });
+ if ((bestellt != null && betrag != vertrag_betrag) ||
+ (bestellt != null && stunden != vertrag_stunden))
+ {
+ row.getData().status = 'Geändert'; // geaendert
+ }
+ else if (bestellt == null && erteilt == null && akzeptiert == null)
+ {
+ row.getData().status = 'Neu'; // neu
+ }
+ else if (bestellt != null && erteilt == null && akzeptiert == null)
+ {
+ row.getData().status = 'Bestellt'; // bestellt
+ }
+ else if (bestellt != null && erteilt != null && akzeptiert == null)
+ {
+ row.getData().status = 'Erteilt'; // erteilt
+ }
+ else if (bestellt != null && erteilt != null && akzeptiert != null)
+ {
+ row.getData().status = 'Akzeptiert'; // akzeptiert
+ }
+ else
+ {
+ row.getData().status = null; // default
+ }
+ });
}
// Performes after row was updated
function func_rowUpdated(row){
- // Refresh status icon and row color
- row.reformat(); // retriggers cell formatters and rowFormatter callback
+ // Refresh status icon and row color
+ row.reformat(); // retriggers cell formatters and rowFormatter callback
- // Deselect and disable new selection of updated rows
- row.deselect();
- row.getElement().style["pointerEvents"] = "none";
+ // Deselect and disable new selection of updated rows
+ row.deselect();
+ row.getElement().style["pointerEvents"] = "none";
}
// Hide betrag, if lector has inkludierte Lehre
function func_renderComplete(table){
- // Check if the lectors actual Verwendung has inkludierte Lehre
- FHC_AjaxClient.ajaxCallGet(
- FHC_JS_DATA_STORAGE_OBJECT.called_path + "/checkInkludierteLehre",
- null,
- {
- successCallback: function (data, textStatus, jqXHR)
- {
- // If lector has inkludierte Lehre, hide the column betrag
- if (data.retval)
- {
- table.hideColumn("betrag");
- }
- },
- errorCallback: function (jqXHR, textStatus, errorThrown)
- {
- FHC_DialogLib.alertError("Systemfehler Bitte kontaktieren Sie Ihren Administrator.");
- }
- }
- );
+ // Check if the lectors actual Verwendung has inkludierte Lehre
+ FHC_AjaxClient.ajaxCallGet(
+ FHC_JS_DATA_STORAGE_OBJECT.called_path + "/checkInkludierteLehre",
+ null,
+ {
+ successCallback: function (data, textStatus, jqXHR)
+ {
+ // If lector has inkludierte Lehre, hide the column betrag
+ if (data.retval)
+ {
+ table.hideColumn("betrag");
+ }
+ },
+ errorCallback: function (jqXHR, textStatus, errorThrown)
+ {
+ FHC_DialogLib.alertError("Systemfehler Bitte kontaktieren Sie Ihren Administrator.");
+ }
+ }
+ );
}
// Tabulator footer element
@@ -251,32 +260,32 @@ function func_renderComplete(table){
// Adds a footer with buttons select all / deselect all / download
function func_footerElement(){
- var footer_html = '';
- footer_html += '
';
+ var footer_html = '
';
+ footer_html += '
';
- footer_html += '
';
+ footer_html += '
';
- footer_html += '
';
+ footer_html += '
';
- footer_html += '
';
- footer_html += '
';
+ footer_html += '
';
+ footer_html += '
';
- return footer_html;
+ return footer_html;
}
// Performs download CSV
function footer_downloadCSV(){
- $('#tableWidgetTabulator').tabulator("download", "csv", "data.csv", {bom:true}); // BOM for correct UTF-8 char output
+ $('#tableWidgetTabulator').tabulator("download", "csv", "data.csv", {bom:true}); // BOM for correct UTF-8 char output
}
/*
@@ -284,12 +293,12 @@ function footer_downloadCSV(){
* Select all (filtered) rows and ignore rows that are bestellt and erteilt
*/
function footer_selectAll(){
- $('#tableWidgetTabulator').tabulator('getRows', true)
- .filter(row => row.getData().bestellt != null && // bestellt
- row.getData().erteilt != null && // AND erteilt
- row.getData().akzeptiert == null && // AND NOT akzeptiert
- row.getData().status != 'Geändert') // AND NOT geändert
- .forEach((row => row.select()));
+ $('#tableWidgetTabulator').tabulator('getRows', true)
+ .filter(row => row.getData().bestellt != null && // bestellt
+ row.getData().erteilt != null && // AND erteilt
+ row.getData().akzeptiert == null && // AND NOT akzeptiert
+ row.getData().status != 'Geändert') // AND NOT geändert
+ .forEach((row => row.select()));
}
/*
@@ -297,12 +306,12 @@ function footer_selectAll(){
* Deselect all (filtered) rows
*/
function footer_deselectAll(){
- $('#tableWidgetTabulator').tabulator('deselectRow');
+ $('#tableWidgetTabulator').tabulator('deselectRow');
}
// Displays number of selected rows on row selection change
function func_rowSelectionChanged(data, rows){
- $('#number-selected').html("Für Annehmen ausgewählt: " + rows.length + " ");
+ $('#number-selected').html("Für Annehmen ausgewählt: " + rows.length + " ");
}
// -----------------------------------------------------------------------------------------------------------------
@@ -311,253 +320,285 @@ function func_rowSelectionChanged(data, rows){
// Generates status icons
status_formatter = function(cell, formatterParams, onRendered){
- var bestellt = cell.getRow().getData().bestellt;
- var erteilt = cell.getRow().getData().erteilt;
- var akzeptiert = cell.getRow().getData().akzeptiert;
+ var bestellt = cell.getRow().getData().bestellt;
+ var erteilt = cell.getRow().getData().erteilt;
+ var akzeptiert = cell.getRow().getData().akzeptiert;
+ var is_storniert = cell.getRow().getData().storniert != undefined;
- var stunden = parseFloat(cell.getRow().getData().stunden);
- var vertrag_stunden = parseFloat(cell.getRow().getData().vertrag_stunden);
+ var stunden = parseFloat(cell.getRow().getData().stunden);
+ var vertrag_stunden = parseFloat(cell.getRow().getData().vertrag_stunden);
- var betrag = parseFloat(cell.getRow().getData().betrag);
- var vertrag_betrag = parseFloat(cell.getRow().getData().vertrag_betrag);
+ var betrag = parseFloat(cell.getRow().getData().betrag);
+ var vertrag_betrag = parseFloat(cell.getRow().getData().vertrag_betrag);
- if (isNaN(betrag))
- {
- betrag = 0;
- }
+ if (isNaN(betrag))
+ {
+ betrag = 0;
+ }
- // commented icons would be so nice to have with fontawsome 5.11...
- if (bestellt != null && isNaN(vertrag_betrag))
- {
- return " "; // kein Vertrag
- }
- else if (bestellt != null && (betrag != vertrag_betrag) ||
- bestellt != null && stunden != vertrag_stunden)
- {
- return ICON_LEHRAUFTRAG_CHANGED; // geaendert
- // return " ";
- }
- else if (bestellt == null && erteilt == null && akzeptiert == null)
- {
- return " "; // neu
- }
- else if (bestellt != null && erteilt == null && akzeptiert == null)
- {
- return ICON_LEHRAUFTRAG_ORDERED; // bestellt
- // return " ";
- }
- else if (bestellt != null && erteilt != null && akzeptiert == null)
- {
- return ICON_LEHRAUFTRAG_APPROVED; // erteilt
- // return " ";
- }
- else if (bestellt != null && erteilt != null && akzeptiert != null)
- {
- return " "; // akzeptiert
- // return " ";
- }
- else
- {
- return " "; // default
- }
+ // commented icons would be so nice to have with fontawsome 5.11...
+ if (bestellt != null && isNaN(vertrag_betrag))
+ {
+ return " "; // kein Vertrag
+ }
+ else if (bestellt != null && (betrag != vertrag_betrag) ||
+ bestellt != null && stunden != vertrag_stunden)
+ {
+ return ICON_LEHRAUFTRAG_CHANGED; // geaendert
+ // return " ";
+ }
+ else if (bestellt == null && erteilt == null && akzeptiert == null && !is_storniert)
+ {
+ return " "; // neu
+ }
+ else if (bestellt != null && erteilt == null && akzeptiert == null)
+ {
+ return ICON_LEHRAUFTRAG_ORDERED; // bestellt
+ // return " ";
+ }
+ else if (bestellt != null && erteilt != null && akzeptiert == null)
+ {
+ return ICON_LEHRAUFTRAG_APPROVED; // erteilt
+ // return " ";
+ }
+ else if (bestellt != null && erteilt != null && akzeptiert != null)
+ {
+ return " "; // akzeptiert
+ // return " ";
+ }
+ else if (is_storniert)
+ {
+ return ICON_LEHRAUFTRAG_CANCELLED; // storniert
+ }
+ else
+ {
+ return " "; // default
+ }
};
// Generates status tooltip
status_tooltip = function(cell){
- var bestellt = cell.getRow().getData().bestellt;
- var erteilt = cell.getRow().getData().erteilt;
- var akzeptiert = cell.getRow().getData().akzeptiert;
+ var bestellt = cell.getRow().getData().bestellt;
+ var erteilt = cell.getRow().getData().erteilt;
+ var akzeptiert = cell.getRow().getData().akzeptiert;
+ var is_storniert = cell.getRow().getData().storniert != undefined;
+ var letzterStatus_vorStorniert = cell.getRow().getData().letzterStatus_vorStorniert;
- var stunden = parseFloat(cell.getRow().getData().stunden);
- var vertrag_stunden = parseFloat(cell.getRow().getData().vertrag_stunden);
- var betrag = parseFloat(cell.getRow().getData().betrag);
- var vertrag_betrag = parseFloat(cell.getRow().getData().vertrag_betrag);
+ var stunden = parseFloat(cell.getRow().getData().stunden);
+ var vertrag_stunden = parseFloat(cell.getRow().getData().vertrag_stunden);
- if (isNaN(betrag))
- {
- betrag = 0;
- }
+ var betrag = parseFloat(cell.getRow().getData().betrag);
+ var vertrag_betrag = parseFloat(cell.getRow().getData().vertrag_betrag);
- var text = 'Lehrauftrag in Bearbeitung. ';
+ if (isNaN(betrag))
+ {
+ betrag = 0;
+ }
- if (bestellt != null && erteilt == null && akzeptiert == null
- && (betrag != vertrag_betrag || stunden != vertrag_stunden)) // geaendert (when never erteilt before)
- {
- text += 'Wartet auf Erteilung.';
- return text;
- }
- else if (bestellt != null && erteilt != null && akzeptiert == null
- && (betrag != vertrag_betrag || stunden != vertrag_stunden)) // geaendert (when has been erteilt once)
- {
- text += 'Wartet auf erneute Erteilung.';
- return text;
- }
- else if (bestellt != null && erteilt == null && akzeptiert == null) // bestellt
- {
- return 'Letzter Status: Bestellt. Wartet auf Erteilung.';
- }
- else if (bestellt != null && erteilt != null && akzeptiert == null) // erteilt
- {
- return 'Letzter Status: Erteilt. Wartet auf Annahme durch Lektor.';
- }
- else if (bestellt != null && erteilt != null && akzeptiert != null) // akzeptiert
- {
- return 'Letzter Status: Angenommen. Vertrag wurde beidseitig abgeschlossen.';
- }
+ if (letzterStatus_vorStorniert != undefined && letzterStatus_vorStorniert == 'akzeptiert')
+ {
+ letzterStatus_vorStorniert = 'angenommen';
+ }
+
+ var text = 'Lehrauftrag in Bearbeitung. ';
+
+ if (bestellt != null && erteilt == null && akzeptiert == null
+ && (betrag != vertrag_betrag || stunden != vertrag_stunden)) // geaendert (when never erteilt before)
+ {
+ text += 'Wartet auf Erteilung.';
+ return text;
+ }
+ else if (bestellt != null && erteilt != null && akzeptiert == null
+ && (betrag != vertrag_betrag || stunden != vertrag_stunden)) // geaendert (when has been erteilt once)
+ {
+ text += 'Wartet auf erneute Erteilung.';
+ return text;
+ }
+ else if (bestellt != null && erteilt == null && akzeptiert == null) // bestellt
+ {
+ return 'Letzter Status: Bestellt. Wartet auf Erteilung.';
+ }
+ else if (bestellt != null && erteilt != null && akzeptiert == null) // erteilt
+ {
+ return 'Letzter Status: Erteilt. Wartet auf Annahme durch Lektor.';
+ }
+ else if (bestellt != null && erteilt != null && akzeptiert != null) // akzeptiert
+ {
+ return 'Letzter Status: Angenommen. Vertrag wurde beidseitig abgeschlossen.';
+ }
+ else if (is_storniert)
+ {
+ return 'Dieser Vertrag wurde storniert. Letzter Status vor Stornierung war: '
+ + letzterStatus_vorStorniert; // storniert
+ }
}
// Generates bestellt tooltip
bestellt_tooltip = function(cell){
- if (cell.getRow().getData().bestellt_von != null)
- {
- return 'Bestellt von: ' + cell.getRow().getData().bestellt_von;
- }
+ if (cell.getRow().getData().bestellt_von != null)
+ {
+ return 'Bestellt von: ' + cell.getRow().getData().bestellt_von;
+ }
}
// Generates erteilt tooltip
erteilt_tooltip = function(cell){
- if (cell.getRow().getData().erteilt_von != null) {
- return 'Erteilt von: ' + cell.getRow().getData().erteilt_von;
- }
+ if (cell.getRow().getData().erteilt_von != null) {
+ return 'Erteilt von: ' + cell.getRow().getData().erteilt_von;
+ }
}
// Generates akzeptiert tooltip
akzeptiert_tooltip = function(cell){
- if (cell.getRow().getData().akzeptiert_von != null) {
- return 'Angenommen von: ' + cell.getRow().getData().akzeptiert_von;
- }
+ if (cell.getRow().getData().akzeptiert_von != null) {
+ return 'Angenommen von: ' + cell.getRow().getData().akzeptiert_von;
+ }
+}
+
+// Generates storniert tooltip
+storniert_tooltip = function(cell){
+ if (cell.getRow().getData().storniert_von != null) {
+ return 'Storniert von: ' + cell.getRow().getData().storniert_von;
+ }
}
$(function() {
+ // Show all rows
+ $("#show-all").click(function(){
+ $('#tableWidgetTabulator').tabulator('clearFilter');
+ });
- // Show all rows
- $("#show-all").click(function(){
- $('#tableWidgetTabulator').tabulator('clearFilter');
- });
+ // Show only rows with ordered lehrauftraege
+ $("#show-ordered").click(function(){
+ $('#tableWidgetTabulator').tabulator('setFilter',
+ [
+ {field: 'bestellt', type: '!=', value: null},
+ {field: 'erteilt', type: '=', value: null},
+ {field: 'akzeptiert', type: '=', value: null}
+ ]
+ );
+ });
- // Show only rows with ordered lehrauftraege
- $("#show-ordered").click(function(){
- $('#tableWidgetTabulator').tabulator('setFilter',
- [
- {field: 'bestellt', type: '!=', value: null},
- {field: 'erteilt', type: '=', value: null},
- {field: 'akzeptiert', type: '=', value: null}
- ]
- );
- });
+ // Show only rows with erteilte lehrauftraege
+ $("#show-approved").click(function(){
+ $('#tableWidgetTabulator').tabulator('setFilter', [
+ {field: 'bestellt', type: '!=', value: null}, // filter when is bestellt
+ {field: 'erteilt', type: '!=', value: null}, // and is erteilt
+ {field: 'akzeptiert', type: '=', value: null} // and is not akzeptiert
+ ]
+ );
+ });
- // Show only rows with erteilte lehrauftraege
- $("#show-approved").click(function(){
- $('#tableWidgetTabulator').tabulator('setFilter', [
- {field: 'bestellt', type: '!=', value: null}, // filter when is bestellt
- {field: 'erteilt', type: '!=', value: null}, // and is erteilt
- {field: 'akzeptiert', type: '=', value: null} // and is not akzeptiert
- ]
- );
- });
+ // Show only rows with akzeptierte lehrauftraege
+ $("#show-accepted").click(function(){
+ $('#tableWidgetTabulator').tabulator('setFilter',
+ [
+ {field: 'bestellt', type: '!=', value: null},
+ {field: 'erteilt', type: '!=', value: null},
+ {field: 'akzeptiert', type: '!=', value: null}
+ ]
+ );
+ });
- // Show only rows with akzeptierte lehrauftraege
- $("#show-accepted").click(function(){
- $('#tableWidgetTabulator').tabulator('setFilter',
- [
- {field: 'bestellt', type: '!=', value: null},
- {field: 'erteilt', type: '!=', value: null},
- {field: 'akzeptiert', type: '!=', value: null}
- ]
- );
- });
+ // Set png-icons into filter-buttons
+ $(".btn-lehrauftrag").each(function(){
+ switch(this.id) {
+ case 'show-ordered':
+ this.innerHTML = ICON_LEHRAUFTRAG_ORDERED;
+ break;
+ case 'show-approved':
+ this.innerHTML = ICON_LEHRAUFTRAG_APPROVED;
+ break;
+ case 'show-cancelled':
+ this.innerHTML = ICON_LEHRAUFTRAG_CANCELLED;
+ break;
+ }
+ });
- // Set png-icons into filter-buttons
- $(".btn-lehrauftrag").each(function(){
- switch(this.id) {
- case 'show-ordered':
- this.innerHTML = ICON_LEHRAUFTRAG_ORDERED;
- break;
- case 'show-approved':
- this.innerHTML = ICON_LEHRAUFTRAG_APPROVED;
- break;
- }
- });
+ // De/activate and un/focus on clicked button
+ $(".btn-lehrauftrag").click(function() {
- // De/activate and un/focus on clicked button
- $(".btn-lehrauftrag").click(function() {
+ // De/activate and un/focus on clicked button
+ $(".btn-lehrauftrag").removeClass('focus').removeClass('active');
+ $(this).addClass('focus').addClass('active');
+ });
- // De/activate and un/focus on clicked button
- $(".btn-lehrauftrag").removeClass('focus').removeClass('active');
- $(this).addClass('focus').addClass('active');
- });
+ // Redraw table stornierte lehrauftraege on button click
+ $('#collapseCancelledLehrauftraege').on('shown.bs.collapse', function () {
+ $('[tableuniqueid = cancelledLehrauftrag] #tableWidgetTabulator').tabulator('redraw', true);
+ });
- // Approve Lehrauftraege
- $("#accept-lehrauftraege").click(function(){
+ // Approve Lehrauftraege
+ $("#accept-lehrauftraege").click(function(){
- // Get selected rows data
- var selected_data = $('#tableWidgetTabulator').tabulator('getSelectedData')
- .map(function(data){
- // reduce to necessary fields
- return {
- 'row_index' : data.row_index,
- 'vertrag_id' : data.vertrag_id
- }
- });
+ // Get selected rows data
+ var selected_data = $('#tableWidgetTabulator').tabulator('getSelectedData')
+ .map(function(data){
+ // reduce to necessary fields
+ return {
+ 'row_index' : data.row_index,
+ 'vertrag_id' : data.vertrag_id
+ }
+ });
- // Alert and exit if no lehraufgang is selected
- if (selected_data.length == 0)
- {
- FHC_DialogLib.alertInfo('Bitte wählen Sie erst zumindest einen Lehrauftrag');
+ // Alert and exit if no lehraufgang is selected
+ if (selected_data.length == 0)
+ {
+ FHC_DialogLib.alertInfo('Bitte wählen Sie erst zumindest einen Lehrauftrag');
- // Emtpy password field
- $("#password").val('');
+ // Emtpy password field
+ $("#password").val('');
- return;
- }
+ return;
+ }
- // Get password for verification
- var password = $("#password").val();
- if (password == '')
- {
- FHC_DialogLib.alertInfo('Bitte verifizieren Sie sich mit Ihrem Login Passwort.');
+ // Get password for verification
+ var password = $("#password").val();
+ if (password == '')
+ {
+ FHC_DialogLib.alertInfo('Bitte verifizieren Sie sich mit Ihrem Login Passwort.');
- // Focus on password field
- $("#password").focus();
+ // Focus on password field
+ $("#password").focus();
- return;
- }
+ return;
+ }
- // Prepare data object for ajax call
- var data = {
- 'password': password,
- 'selected_data': selected_data
- };
+ // Prepare data object for ajax call
+ var data = {
+ 'password': password,
+ 'selected_data': selected_data
+ };
- FHC_AjaxClient.ajaxCallPost(
- FHC_JS_DATA_STORAGE_OBJECT.called_path + "/acceptLehrauftrag",
- data,
- {
- successCallback: function (data, textStatus, jqXHR)
- {
- if (data.error)
- {
- // Password not verified
- FHC_DialogLib.alertWarning(data.retval);
- }
- if (!data.error && data.retval != null)
- {
- // Update status 'Erteilt'
- $('#tableWidgetTabulator').tabulator('updateData', data.retval);
- FHC_DialogLib.alertSuccess(data.retval.length + " Lehraufträge wurden akzeptiert.");
- }
- },
- errorCallback: function (jqXHR, textStatus, errorThrown)
- {
- FHC_DialogLib.alertError("Systemfehler Bitte kontaktieren Sie Ihren Administrator.");
- }
- }
- );
+ FHC_AjaxClient.ajaxCallPost(
+ FHC_JS_DATA_STORAGE_OBJECT.called_path + "/acceptLehrauftrag",
+ data,
+ {
+ successCallback: function (data, textStatus, jqXHR)
+ {
+ if (data.error)
+ {
+ // Password not verified
+ FHC_DialogLib.alertWarning(data.retval);
+ }
+ if (!data.error && data.retval != null)
+ {
+ // Update status 'Erteilt'
+ $('#tableWidgetTabulator').tabulator('updateData', data.retval);
+ FHC_DialogLib.alertSuccess(data.retval.length + " Lehraufträge wurden akzeptiert.");
+ }
+ },
+ errorCallback: function (jqXHR, textStatus, errorThrown)
+ {
+ FHC_DialogLib.alertError("Systemfehler Bitte kontaktieren Sie Ihren Administrator.");
+ }
+ }
+ );
- // Empty password field
- $("#password").val('');
+ // Empty password field
+ $("#password").val('');
- });
+ });
});
diff --git a/public/js/lehre/lehrauftrag/approveLehrauftrag.js b/public/js/lehre/lehrauftrag/approveLehrauftrag.js
index 2cc42abd0..94e6af473 100644
--- a/public/js/lehre/lehrauftrag/approveLehrauftrag.js
+++ b/public/js/lehre/lehrauftrag/approveLehrauftrag.js
@@ -94,9 +94,16 @@ function func_initialFilter(){
// -----------------------------------------------------------------------------------------------------------------
// Tabulator table format functions
// -----------------------------------------------------------------------------------------------------------------
+
+// Displays text when table is empty
+function func_placeholder()
+{
+ return "Keine Daten vorhanden. ";
+}
+
// Formats the group header
function func_groupHeader(data){
- return data[0].lv_bezeichnung; // change name to lehrveranstaltung
+ return data[0].lv_bezeichnung + " " + ' ( LV-ID: ' + data[0].lehrveranstaltung_id + ' )'; // change name to lehrveranstaltung;
};
// Formats the rows
diff --git a/public/js/lehre/lehrauftrag/orderLehrauftrag.js b/public/js/lehre/lehrauftrag/orderLehrauftrag.js
index dfcc46636..4e58272e5 100644
--- a/public/js/lehre/lehrauftrag/orderLehrauftrag.js
+++ b/public/js/lehre/lehrauftrag/orderLehrauftrag.js
@@ -99,10 +99,17 @@ function func_dataLoaded(data, table){
// -----------------------------------------------------------------------------------------------------------------
// Tabulator table format functions
// -----------------------------------------------------------------------------------------------------------------
+
+// Displays text when table is empty
+function func_placeholder()
+{
+ return "Keine Daten vorhanden. ";
+}
+
// Formats the group header
-function func_groupHeader(data){
- return data[0].lv_bezeichnung; // change name to lehrveranstaltung
-};
+function func_groupHeader(data) {
+ return data[0].lv_bezeichnung + " " + ' ( LV-ID: ' + data[0].lehrveranstaltung_id + ' )'; // change name to lehrveranstaltung;
+}
// Formats the rows
function func_rowFormatter(row){
diff --git a/rdf/vertrag.rdf.php b/rdf/vertrag.rdf.php
index 5f1eea221..e2f45b61f 100644
--- a/rdf/vertrag.rdf.php
+++ b/rdf/vertrag.rdf.php
@@ -31,7 +31,7 @@ $uid = get_uid();
$rechte = new benutzerberechtigung();
$rechte->getBerechtigungen($uid);
-if(!$rechte->isBerechtigt('vertrag/mitarbeiter'))
+if(!$rechte->isBerechtigt('vertrag/mitarbeiter') && !$rechte->isBerechtigt('lehre/lehrauftrag_bestellen'))
die('Sie haben keine Berechtigung für diese Seite');
$datum_obj = new datum();
diff --git a/rdf/zeugnisnote.rdf.php b/rdf/zeugnisnote.rdf.php
index 8f2840d6a..4fd3a37cf 100644
--- a/rdf/zeugnisnote.rdf.php
+++ b/rdf/zeugnisnote.rdf.php
@@ -119,6 +119,7 @@ foreach ($obj->result as $row)
studiengang_kz])?$stg_arr[$benutzer->studiengang_kz]:'').']]>
studiengang_kz.']]>
studiengang_kz].']]>
+ studiengang_kz.']]>
semester.']]>
ects.']]>
semester.']]>
diff --git a/soap/stip.class.php b/soap/stip.class.php
index 1ce7efc84..2787dfac3 100644
--- a/soap/stip.class.php
+++ b/soap/stip.class.php
@@ -151,8 +151,8 @@ class stip extends basis_db
$this->Familienname_Antwort = $row->nachname;
$this->SVNR_Antwort = $row->svnr;
$this->PersKz_Antwort = trim($row->matrikelnr);
- $this->StgKz = str_pad($row->studiengang_kz, 4,'0', STR_PAD_LEFT);
- $this->Matrikelnummer = $row->matr_nr;
+ $this->StgKz_Antwort = str_pad($row->studiengang_kz, 4,'0', STR_PAD_LEFT);
+ $this->Matrikelnummer_Antwort = $row->matr_nr;
$this->AntwortStatusCode = 1;
return $row->prestudent_id;
}
@@ -193,8 +193,8 @@ class stip extends basis_db
$this->Familienname_Antwort = $row->nachname;
$this->SVNR_Antwort = $row->svnr;
$this->PersKz_Antwort = trim($row->matrikelnr);
- $this->StgKz = str_pad($row->studiengang_kz, 4,'0', STR_PAD_LEFT);
- $this->Matrikelnummer = $row->matr_nr;
+ $this->StgKz_Antwort = str_pad($row->studiengang_kz, 4,'0', STR_PAD_LEFT);
+ $this->Matrikelnummer_Antwort = $row->matr_nr;
$this->AntwortStatusCode = 1;
return $row->prestudent_id;
}
@@ -236,8 +236,8 @@ class stip extends basis_db
$this->Familienname_Antwort = $row->nachname;
$this->SVNR_Antwort = $row->svnr;
$this->PersKz_Antwort = trim($row->matrikelnr);
- $this->StgKz = str_pad($row->studiengang_kz, 4,'0', STR_PAD_LEFT);
- $this->Matrikelnummer = $row->matr_nr;
+ $this->StgKz_Antwort = str_pad($row->studiengang_kz, 4,'0', STR_PAD_LEFT);
+ $this->Matrikelnummer_Antwort = $row->matr_nr;
$this->AntwortStatusCode = 1;
return $row->prestudent_id;
}
@@ -289,8 +289,8 @@ class stip extends basis_db
$this->Familienname_Antwort = $row->nachname;
$this->SVNR_Antwort = $row->svnr;
$this->PersKz_Antwort = trim($row->matrikelnr);
- $this->StgKz = str_pad($row->studiengang_kz, 4,'0', STR_PAD_LEFT);
- $this->Matrikelnummer = $row->matr_nr;
+ $this->StgKz_Antwort = str_pad($row->studiengang_kz, 4,'0', STR_PAD_LEFT);
+ $this->Matrikelnummer_Antwort = $row->matr_nr;
$this->AntwortStatusCode = 1;
return $row->prestudent_id;
}
diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php
index e68011401..4dbfbebe0 100644
--- a/system/phrasesupdate.php
+++ b/system/phrasesupdate.php
@@ -4094,7 +4094,27 @@ When on hold, the date is only a reminder.',
'insertvon' => 'system'
)
)
- )
+ ),
+ array(
+ 'app' => 'core',
+ 'category' => 'global',
+ 'phrase' => 'stornierteLehrauftraege',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => 'Stornierte Lehraufträge',
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => 'Cancelled lectureships',
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ )
);