diff --git a/application/config/anrechnung.php b/application/config/anrechnung.php
index 2c7ec1a5b..768ec3197 100644
--- a/application/config/anrechnung.php
+++ b/application/config/anrechnung.php
@@ -6,10 +6,6 @@ if (! defined('BASEPATH')) exit('No direct script access allowed');
// Deadline for Application given as Time-Interval after Semesterstart.
$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.10.2022';
-
// Lehrveranstaltungen with these grades will be blocked for application
$config['grades_blocking_application'] = array(
5, // nicht genügend
@@ -24,4 +20,4 @@ $config['grades_blocking_application'] = array(
//Enables Fachbereichsleiter instead of LV Leiter
$config['fbl'] = FALSE;
//Enables Info Mails
-$config['send_mail'] = TRUE;
\ No newline at end of file
+$config['send_mail'] = TRUE;
diff --git a/application/config/navigation.php b/application/config/navigation.php
index 092c00cc5..928f5bae3 100644
--- a/application/config/navigation.php
+++ b/application/config/navigation.php
@@ -164,7 +164,14 @@ $config['navigation_header'] = array(
'expand' => true,
'sort' => 20,
'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(
'reihungstestverwalung' => array(
'link' => base_url('vilesci/stammdaten/reihungstestverwaltung.php'),
diff --git a/application/controllers/lehre/anrechnung/AdminAnrechnung.php b/application/controllers/lehre/anrechnung/AdminAnrechnung.php
new file mode 100644
index 000000000..3c3fd3fc2
--- /dev/null
+++ b/application/controllers/lehre/anrechnung/AdminAnrechnung.php
@@ -0,0 +1,187 @@
+ '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');
+ }
+}
\ No newline at end of file
diff --git a/application/controllers/lehre/anrechnung/RequestAnrechnung.php b/application/controllers/lehre/anrechnung/RequestAnrechnung.php
index 3f9138f04..e9059720b 100644
--- a/application/controllers/lehre/anrechnung/RequestAnrechnung.php
+++ b/application/controllers/lehre/anrechnung/RequestAnrechnung.php
@@ -80,11 +80,7 @@ class requestAnrechnung extends Auth_Controller
$prestudent_id = getData($result)[0]->prestudent_id;
// Check if application deadline is expired
- $is_expired = self::_isExpired(
- $this->config->item('submit_application_start'),
- $this->config->item('submit_application_end'),
- $studiensemester_kurzbz
- );
+ $is_expired = $this->_isExpired($studiensemester_kurzbz);
// Check if Lehrveranstaltung was already graded with application blocking grades
$is_blocked = self::_LVhasBlockingGrades($studiensemester_kurzbz, $lehrveranstaltung_id);
@@ -234,32 +230,30 @@ class requestAnrechnung extends Auth_Controller
* @return bool True if deadline is expired
* @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.
- if (!isset($start) || isEmptyString($start))
- {
- $this->StudiensemesterModel->addSelect('start');
- $result = $this->StudiensemesterModel->load($studiensemester_kurzbz);
- $start = getData($result)[0]->start;
- }
+ // Load all Anrechnungszeitfenster for this Studiensemester
+ $this->load->model('education/Anrechnungszeitraum_model', 'AnrechnungszeitraumModel');
+ $result = $this->AnrechnungszeitraumModel->loadWhere(array('studiensemester_kurzbz' => $studiensemester_kurzbz));
- // If ende is not given, set to Semesterende.
- if (!isset($ende) || isEmptyString($ende))
- {
- $this->StudiensemesterModel->addSelect('ende');
- $result = $this->StudiensemesterModel->load($studiensemester_kurzbz);
- $ende = getData($result)[0]->ende;
- }
+ if (hasData($result))
+ {
+ // Loop through Anrechnungszeitfenster
+ foreach (getData($result) as $azrObj)
+ {
+ $start = new DateTime($azrObj->anrechnungstart);
+ $ende = new DateTime($azrObj->anrechnungende);
- $today = new DateTime('today midnight');
- $start = new DateTime($start);
- $ende = new DateTime($ende);
+ // Return false if today is at least within one Anrechnungszeitraum
+ if (($today >= $start && $today <= $ende)) return false;
- // True if expired
- return ($today < $start || $today > $ende);
+ }
+ }
+
+ // Return true if today is in none Anrechnungszeitraum
+ return true;
}
/**
diff --git a/application/models/education/Anrechnungszeitraum_model.php b/application/models/education/Anrechnungszeitraum_model.php
new file mode 100644
index 000000000..e6f0f13d3
--- /dev/null
+++ b/application/models/education/Anrechnungszeitraum_model.php
@@ -0,0 +1,87 @@
+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);
+ }
+
+}
diff --git a/application/views/lehre/anrechnung/adminAnrechnung.php b/application/views/lehre/anrechnung/adminAnrechnung.php
new file mode 100644
index 000000000..cb9a55c18
--- /dev/null
+++ b/application/views/lehre/anrechnung/adminAnrechnung.php
@@ -0,0 +1,137 @@
+ $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);
+?>
+
+
+
+ widgetlib->widget('NavigationWidget'); ?>
+
+
+
+
+
+
+
+
+
p->t('anrechnung', 'anrechnungszeitraumFestlegen'); ?>
+
+
+
+
+
+
+
+
+
+
+ load->view('lehre/anrechnung/adminAnrechnungData.php'); ?>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ widgetlib->widget(
+ 'Studiensemester_widget',
+ array(
+ DropdownWidget::SELECTED_ELEMENT => $studiensemester_kurzbz
+ ),
+ array(
+ 'name' => 'studiensemester',
+ 'id' => 'studiensemester'
+ )
+ );
+ ?>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+load->view('templates/FHC-Footer', $includesArray); ?>
+
diff --git a/application/views/lehre/anrechnung/adminAnrechnungData.php b/application/views/lehre/anrechnung/adminAnrechnungData.php
new file mode 100644
index 000000000..652c349d8
--- /dev/null
+++ b/application/views/lehre/anrechnung/adminAnrechnungData.php
@@ -0,0 +1,45 @@
+ $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);
\ No newline at end of file
diff --git a/public/css/sbadmin2/tablesort_bootstrap.css b/public/css/sbadmin2/tablesort_bootstrap.css
index 3e2574241..be9834a62 100644
--- a/public/css/sbadmin2/tablesort_bootstrap.css
+++ b/public/css/sbadmin2/tablesort_bootstrap.css
@@ -65,4 +65,4 @@ table.tablesort-hover tr:hover, .tablesort-active {
/* bring datepicker to front */
#ui-datepicker-div {
z-index: 9999 !important;
-}
+}
\ No newline at end of file
diff --git a/public/js/lehre/anrechnung/adminAnrechnung.js b/public/js/lehre/anrechnung/adminAnrechnung.js
new file mode 100644
index 000000000..51412bff0
--- /dev/null
+++ b/public/js/lehre/anrechnung/adminAnrechnung.js
@@ -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 = "";
+ 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 = "";
+ 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);
+ }
+}
\ No newline at end of file
diff --git a/system/dbupdate_3.4.php b/system/dbupdate_3.4.php
index bc8152a90..013172269 100644
--- a/system/dbupdate_3.4.php
+++ b/system/dbupdate_3.4.php
@@ -31,6 +31,7 @@ require_once('dbupdate_3.4/example2.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/17512_fehlercode_constraints.php');
+require_once('dbupdate_3.4/27388_anrechnungen_zeitfenster_pflegen.php');
require_once('dbupdate_3.4/19154_beurteilungsformulare_pruefungssenat.php');
// *** Pruefung und hinzufuegen der neuen Attribute und Tabellen
@@ -146,6 +147,7 @@ $tabellen=array(
"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_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_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"),
diff --git a/system/dbupdate_3.4/27388_anrechnungen_zeitfenster_pflegen.php b/system/dbupdate_3.4/27388_anrechnungen_zeitfenster_pflegen.php
new file mode 100644
index 000000000..3c84e2d17
--- /dev/null
+++ b/system/dbupdate_3.4/27388_anrechnungen_zeitfenster_pflegen.php
@@ -0,0 +1,57 @@
+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 'lehre.tbl_anrechnungszeitraum: '.$db->db_last_error().'
';
+ else
+ echo ' lehre.tbl_anrechnungszeitraum: Tabelle hinzugefuegt
';
+}
+
+// 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 'system.tbl_berechtigung '.$db->db_last_error().'
';
+ else
+ echo ' system.tbl_berechtigung: Added permission for lehre/anrechnungszeitfenster
';
+ }
+}
\ No newline at end of file
diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php
index 561559363..f8c5c1db3 100644
--- a/system/phrasesupdate.php
+++ b/system/phrasesupdate.php
@@ -12129,6 +12129,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(
'app' => 'core',
'category' => 'ui',
@@ -13145,6 +13345,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(
'app' => 'core',
'category' => 'global',