diff --git a/application/controllers/api/frontend/v1/stv/Dokumente.php b/application/controllers/api/frontend/v1/stv/Dokumente.php
index b8c7830bd..913a57dc4 100644
--- a/application/controllers/api/frontend/v1/stv/Dokumente.php
+++ b/application/controllers/api/frontend/v1/stv/Dokumente.php
@@ -78,52 +78,32 @@ class Dokumente extends FHCAPI_Controller
$this->terminateWithError($this->p->t('ui', 'errorMissingValue', ['value' => 'Studiengang_kz']), self::ERROR_TYPE_GENERAL);
$resultPreDoc = $this->_getPrestudentDokumente($prestudent_id);
-
- $arrayAccepted = [];
$person_id = $this->_getPersonId($prestudent_id);
- $docNames = array_map(function ($item) {
- return $item->dokument_kurzbz;
- }, $resultPreDoc);
+ $mergedArray = [];
- foreach($docNames as $doc)
+ foreach ($resultPreDoc as $pre)
{
- $result = $this->AkteModel->getAktenFAS($person_id, $doc, $studiengang_kz, $prestudent_id, true);
+ $result = $this->AkteModel->getAktenFAS($person_id, $pre->dokument_kurzbz, $studiengang_kz, $prestudent_id, true);
if (isError($result))
- {
return $this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
- }
+
if (hasData($result))
{
- $data = getData($result);
- foreach ($data as $value)
+ foreach (getData($result) as $doc)
{
- array_push($arrayAccepted, $value);
+ $merged = clone $doc;
+ $merged->docdatum = $pre->docdatum;
+ $merged->insertvonma = $pre->insertvonma;
+ $merged->bezeichnung = $pre->bezeichnung;
+ $mergedArray[] = $merged;
}
}
- }
-
- //Mapping with document_kurzbz
- $preDocMap = [];
- foreach ($resultPreDoc as $pre) {
- $preDocMap[$pre->dokument_kurzbz] = $pre;
- }
-
- $mergedArray = [];
- foreach ($arrayAccepted as $doc) {
- $merged = clone $doc;
-
- if (isset($preDocMap[$doc->dokument_kurzbz])) {
- $merged->docdatum = $preDocMap[$doc->dokument_kurzbz]->docdatum;
- $merged->insertvonma = $preDocMap[$doc->dokument_kurzbz]->insertvonma;
- $merged->bezeichnung = $preDocMap[$doc->dokument_kurzbz]->bezeichnung;
- } else {
- $merged->akzeptiertdatum = null;
- $merged->akzeptiertvon = null;
+ else
+ {
+ $mergedArray[] = $pre;
}
-
- $mergedArray[] = $merged;
}
$this->terminateWithSuccess($mergedArray);
diff --git a/application/controllers/api/frontend/v1/stv/Konto.php b/application/controllers/api/frontend/v1/stv/Konto.php
index ecd58671a..d59bc76b0 100644
--- a/application/controllers/api/frontend/v1/stv/Konto.php
+++ b/application/controllers/api/frontend/v1/stv/Konto.php
@@ -48,7 +48,8 @@ class Konto extends FHCAPI_Controller
// Load language phrases
$this->loadPhrases([
- 'konto'
+ 'konto',
+ 'lehre'
]);
}
@@ -112,7 +113,7 @@ class Konto extends FHCAPI_Controller
*
* @return void
*/
- public function getBuchungstypen()
+ public function getBuchungstypen($studiensemester_kurzbz = null)
{
$this->load->model('crm/Buchungstyp_model', 'BuchungstypModel');
@@ -122,6 +123,7 @@ class Konto extends FHCAPI_Controller
$data = $this->getDataOrTerminateWithError($result);
+ $this->_getOEHBeitrag($data, $studiensemester_kurzbz);
$this->terminateWithSuccess($data);
}
@@ -494,4 +496,43 @@ class Konto extends FHCAPI_Controller
$this->terminateWithSuccess();
}
+
+ private function _getOEHBeitrag(&$data, $studiensemester_kurzbz = null)
+ {
+ if (is_null($studiensemester_kurzbz))
+ {
+ $this->load->library('VariableLib', ['uid' => getAuthUID()]);
+ $studiensemester_akt = $this->variablelib->getVar('semester_aktuell');
+ }
+ else
+ {
+ $this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
+ if ($this->StudiensemesterModel->isValidStudiensemester($studiensemester_kurzbz))
+ $studiensemester_akt = $studiensemester_kurzbz;
+ else
+ $this->terminateWithError($this->p->t('lehre', 'error_noStudiensemester'));
+ }
+
+ $this->load->model('codex/Oehbeitrag_model', 'OehbeitragModel');
+ $oehBeitrag = $this->OehbeitragModel->getByStudiensemester($studiensemester_akt);
+
+ $oehStandardbetrag = null;
+ if (hasData($oehBeitrag))
+ {
+ $oeh = getData($oehBeitrag)[0];
+ $summe = ($oeh->studierendenbeitrag + $oeh->versicherung) * -1;
+ $oehStandardbetrag = number_format((float)$summe, 2, '.', '');
+ }
+
+ if ($oehStandardbetrag !== null)
+ {
+ $data = array_map(function ($buchungstyp) use ($oehStandardbetrag) {
+ if (isset($buchungstyp->buchungstyp_kurzbz) && (strtolower($buchungstyp->buchungstyp_kurzbz) === 'oeh'))
+ {
+ $buchungstyp->standardbetrag = $oehStandardbetrag;
+ }
+ return $buchungstyp;
+ }, $data);
+ }
+ }
}
diff --git a/application/core/Notiz_Controller.php b/application/core/Notiz_Controller.php
index 923970923..7269c3b09 100644
--- a/application/core/Notiz_Controller.php
+++ b/application/core/Notiz_Controller.php
@@ -417,6 +417,7 @@ abstract class Notiz_Controller extends FHCAPI_Controller
$notiz_id = $this->input->post('notiz_id');
$this->NotizModel->addSelect('campus.tbl_dms_version.*');
+ $this->NotizModel->addSelect($this->NotizModel->escape(base_url('content/notizdokdownload.php?id=')) . ' || public.tbl_notiz_dokument.dms_id AS preview');
$this->NotizModel->addJoin('public.tbl_notiz_dokument', 'ON (public.tbl_notiz_dokument.notiz_id = public.tbl_notiz.notiz_id)');
$this->NotizModel->addJoin('campus.tbl_dms_version', 'ON (public.tbl_notiz_dokument.dms_id = campus.tbl_dms_version.dms_id)');
diff --git a/content/student/studentoverlay.js.php b/content/student/studentoverlay.js.php
index 9ebe73cfe..1e40960ca 100644
--- a/content/student/studentoverlay.js.php
+++ b/content/student/studentoverlay.js.php
@@ -3555,6 +3555,14 @@ function StudentZeugnisDokumentArchivieren()
case 'microcredential_2':
case 'microcredential_3':
case 'microcredential_4':
+ case 'microdegree_1':
+ case 'microdegree_2':
+ case 'microdegree_3':
+ case 'microdegree_4':
+ case 'microdegreeabschluss_1':
+ case 'microdegreeabschluss_2':
+ case 'microdegreeabschluss_3':
+ case 'microdegreeabschluss_4':
xml = 'microcredential.xml.php';
break;
diff --git a/include/konto.class.php b/include/konto.class.php
index 51f79200b..d3167d5f5 100644
--- a/include/konto.class.php
+++ b/include/konto.class.php
@@ -25,6 +25,7 @@
*/
require_once(dirname(__FILE__).'/basis_db.class.php');
require_once(dirname(__FILE__).'/'.EXT_FKT_PATH.'/generateZahlungsreferenz.inc.php');
+require_once(dirname(__FILE__).'/variable.class.php');
class konto extends basis_db
{
@@ -432,6 +433,8 @@ class konto extends basis_db
$qry.=" ORDER BY beschreibung";
+ $oehBeitrag = $this->_getOEHBeitrag();
+
if($this->db_query($qry))
{
while($row = $this->db_fetch_object())
@@ -440,7 +443,15 @@ class konto extends basis_db
$typ->buchungstyp_kurzbz = $row->buchungstyp_kurzbz;
$typ->beschreibung = $row->beschreibung;
- $typ->standardbetrag = $row->standardbetrag;
+ if (strtolower($typ->buchungstyp_kurzbz) === 'oeh' && $oehBeitrag)
+ {
+ $typ->standardbetrag = $oehBeitrag;
+ }
+ else
+ {
+ $typ->standardbetrag = $row->standardbetrag;
+ }
+
$typ->standardtext = $row->standardtext;
$typ->credit_points = $row->credit_points;
$typ->aktiv = $this->db_parse_bool($row->aktiv);
@@ -990,6 +1001,43 @@ class konto extends basis_db
return false;
}
}
+
+ private function _getOEHBeitrag()
+ {
+ if(!is_user_logged_in())
+ {
+ return false;
+ }
+
+ $variablen_obj = new variable();
+ $variablen_obj->loadVariables(get_uid());
+
+ $qry = "WITH semstart AS (
+ SELECT start FROM public.tbl_studiensemester
+ WHERE studiensemester_kurzbz = '". $this->db_escape($variablen_obj->variable->semester_aktuell) . "'
+ )
+ SELECT * FROM bis.tbl_oehbeitrag oehb
+ JOIN public.tbl_studiensemester semvon ON oehb.von_studiensemester_kurzbz = semvon.studiensemester_kurzbz
+ LEFT JOIN public.tbl_studiensemester sembis ON oehb.bis_studiensemester_kurzbz = sembis.studiensemester_kurzbz
+ JOIN semstart ON semstart.start::date >= semvon.start::date AND (sembis.studiensemester_kurzbz IS NULL OR semstart.start::date <= sembis.start::date)
+ ORDER BY semvon.start
+ LIMIT 1";
+
+ if ($this->db_query($qry))
+ {
+ if($row = $this->db_fetch_object())
+ {
+ $summe = ($row->studierendenbeitrag + $row->versicherung) * -1;
+ return number_format((float)$summe, 2, '.', '');
+ }
+ return false;
+ }
+ else
+ {
+ $this->errormsg = 'Fehler bei der Abfrage aufgetreten';
+ return false;
+ }
+ }
}
?>
diff --git a/public/css/Studentenverwaltung.css b/public/css/Studentenverwaltung.css
index cb4b8f2e9..fb56ec75c 100644
--- a/public/css/Studentenverwaltung.css
+++ b/public/css/Studentenverwaltung.css
@@ -197,10 +197,6 @@ html.fs_huge {
margin-bottom: -1px;
}
-.tiny-90 div.tox.tox-tinymce {
- height: 90% !important;
-}
-
/* slim begin */
.stv .form-label {
margin-bottom: .15rem;
diff --git a/public/js/api/factory/stv/konto.js b/public/js/api/factory/stv/konto.js
index 6c17d460d..c6c167f6a 100644
--- a/public/js/api/factory/stv/konto.js
+++ b/public/js/api/factory/stv/konto.js
@@ -38,6 +38,10 @@ export default {
};
},
insert(params) {
+ if(params.betrag)
+ {
+ params.betrag = params.betrag.replace(',', '.');
+ }
return {
method: 'post',
url: 'api/frontend/v1/stv/konto/insert',
@@ -52,6 +56,10 @@ export default {
};
},
edit(params) {
+ if(params.betrag)
+ {
+ params.betrag = params.betrag.replace(',', '.');
+ }
return {
method: 'post',
url: 'api/frontend/v1/stv/konto/update',
@@ -65,10 +73,14 @@ export default {
params: { buchungsnr }
};
},
- getBuchungstypen() {
+ getBuchungstypen(studiensemester_kurzbz) {
+ let url = 'api/frontend/v1/stv/konto/getBuchungstypen'
+ if (!!studiensemester_kurzbz)
+ url = url + '/' + encodeURIComponent(studiensemester_kurzbz);
+
return {
method: 'get',
- url: 'api/frontend/v1/stv/konto/getBuchungstypen'
+ url: url
};
- }
+ },
};
\ No newline at end of file
diff --git a/public/js/components/Messages/Details/NewMessage/Modal.js b/public/js/components/Messages/Details/NewMessage/Modal.js
index eeda421e6..b23eebbcd 100644
--- a/public/js/components/Messages/Details/NewMessage/Modal.js
+++ b/public/js/components/Messages/Details/NewMessage/Modal.js
@@ -63,7 +63,7 @@ export default {
const vm = this;
tinymce.init({
target: this.$refs.editor.$refs.input, //Important: not selector: to enable multiple import of component
- //height: 800,
+ min_height: 300,
//plugins: ['lists'],
toolbar: 'styleselect | bold italic underline | alignleft aligncenter alignright alignjustify | link',
plugins: 'link',
@@ -313,7 +313,7 @@ export default {
-
+
@@ -338,7 +338,7 @@ export default {
-
+
{
const key = formatterParams[cell.getValue()];
- return this.$p.t('messages', key);
+ return this.$p?.t?.('messages', key) || key;
},
},
{
@@ -305,8 +306,6 @@ export default {
{
event: 'tableBuilt',
handler: async() => {
- await this.$p.loadCategory(['global', 'person', 'stv', 'messages', 'ui', 'notiz']);
-
const setHeader = (field, text) => {
const col = this.$refs.table.tabulator.getColumn(field);
if (!col) return;
@@ -357,6 +356,12 @@ export default {
});*/
},
created(){
+ this.$p
+ .loadCategory(['global', 'person', 'stv', 'messages', 'ui', 'notiz'])
+ .then(() => {
+ this.arePhrasesLoaded = true;
+ });
+
if(this.typeId != 'person_id' && Array.isArray(this.id) && this.id.length === 1) {
const params = {
id: this.id,
@@ -381,6 +386,7 @@ export default {
{
+ this.lists.buchungstypen = result.data;
+ if (this.data.buchungstyp_kurzbz)
+ this.checkDefaultBetrag(this.data.buchungstyp_kurzbz);
+ })
+ .catch(this.$fhcAlert.handleSystemError);
+ },
},
template: `
@@ -166,6 +179,7 @@ export default {
diff --git a/public/js/components/Vertraege/List/Details.js b/public/js/components/Vertraege/List/Details.js
index 8df6a6985..c43f8c893 100644
--- a/public/js/components/Vertraege/List/Details.js
+++ b/public/js/components/Vertraege/List/Details.js
@@ -41,8 +41,8 @@ export default {
),
ajaxResponse: (url, params, response) => response.data,
columns: [
- {title: "Typ", field: "type"},
- {title: "Betrag", field: "betrag",
+ {title: "Typ", field: "type", headerFilter: "list", headerFilterParams: {valuesLookup:true, listOnEmpty:true, autocomplete:true, sort:"asc"}},
+ {title: "Betrag", field: "betrag", headerFilter: true,
formatter: function(cell) {
let value = cell.getValue();
if (value == null) {
@@ -51,14 +51,14 @@ export default {
return parseFloat(value).toFixed(2);
}
},
- {title: "Bezeichnung", field: "bezeichnung"},
- {title: "Studiensemester", field: "studiensemester_kurzbz"},
- {title: "Pruefung_id", field: "pruefung_id", visible: false},
- {title: "mitarbeiter_uid", field: "mitarbeiter_uid", visible: false},
- {title: "projektarbeit_id", field: "projektarbeit_id", visible: false},
- {title: "lehreinheit_id", field: "lehreinheit_id", visible: true},
- {title: "betreuerart_kurzbz", field: "betreuerart_kurzbz", visible: false},
- {title: "vertrag_id", field: "vertrag_id", visible: false}, //just for testing
+ {title: "Bezeichnung", field: "bezeichnung", headerFilter: true},
+ {title: "Studiensemester", field: "studiensemester_kurzbz", headerFilter: "list", headerFilterParams: {valuesLookup:true, listOnEmpty:true, autocomplete:true, sort:"asc"}},
+ {title: "Pruefung_id", field: "pruefung_id", visible: false, headerFilter: true},
+ {title: "mitarbeiter_uid", field: "mitarbeiter_uid", visible: false, headerFilter: true},
+ {title: "projektarbeit_id", field: "projektarbeit_id", visible: false, headerFilter: true},
+ {title: "lehreinheit_id", field: "lehreinheit_id", visible: true, headerFilter: true},
+ {title: "betreuerart_kurzbz", field: "betreuerart_kurzbz", visible: false, headerFilter: true},
+ {title: "vertrag_id", field: "vertrag_id", visible: false, headerFilter: true}, //just for testing
{
title: 'Aktionen', field: 'actions',
minWidth: 50,
@@ -110,10 +110,10 @@ export default {
],
layout: 'fitColumns',
layoutColumnsOnNewData: false,
- height: '200',
+ height: '250',
selectableRowsRangeMode: 'click',
selectableRows: true,
- persistenceID: 'core-contracts-details-2026021701'
+ persistenceID: 'core-contracts-details-2026050501'
},
tabulatorEvents: [
{
@@ -137,7 +137,7 @@ export default {
setHeader('type', this.$p.t('global', 'typ'));
setHeader('bezeichnung', this.$p.t('ui', 'bezeichnung'));
- setHeader('lehreinheit_id', this.$p.t('ui', 'lehreinheit_id'));
+ setHeader('lehreinheit_id', this.$p.t('lehre', 'lehreinheit_id'));
setHeader('betrag', this.$p.t('ui', 'betrag'));
setHeader('studiensemester_kurzbz', this.$p.t('lehre', 'studiensemester'));
setHeader('mitarbeiter_uid', this.$p.t('ui', 'mitarbeiter_uid'));
diff --git a/public/js/components/Vertraege/List/Status.js b/public/js/components/Vertraege/List/Status.js
index 531b2f553..53af7bc40 100644
--- a/public/js/components/Vertraege/List/Status.js
+++ b/public/js/components/Vertraege/List/Status.js
@@ -47,12 +47,13 @@ export default {
this.endpoint.getStatiOfContract(this.person_id, this.vertrag_id)
),
ajaxResponse: (url, params, response) => response.data,
- persistenceID: 'core-contracts-status-2026021701',
+ persistenceID: 'core-contracts-status-2026050501',
columns: [
- {title: "Status", field: "bezeichnung"},
+ {title: "Status", field: "bezeichnung", headerFilter: "list", headerFilterParams: {valuesLookup:true, listOnEmpty:true, autocomplete:true, sort:"asc"}},
{
title: "Datum",
field: "datum",
+ headerFilter: true,
formatter: function (cell) {
const dateStr = cell.getValue();
const date = new Date(dateStr); // Convert to Date object
@@ -66,14 +67,15 @@ export default {
});
}
},
- {title: "vertrag_id", field: "vertrag_id", visible: false},
- {title: "Vertragsstatus", field: "vertragsstatus_kurzbz", visible: false},
- {title: "User", field: "mitarbeiter_uid", visible: false},
- {title: "insertvon", field: "insertvon", visible: false},
+ {title: "vertrag_id", field: "vertrag_id", visible: false, headerFilter: true},
+ {title: "Vertragsstatus", field: "vertragsstatus_kurzbz", visible: false, headerFilter: true},
+ {title: "User", field: "mitarbeiter_uid", visible: false, headerFilter: true},
+ {title: "insertvon", field: "insertvon", visible: false, headerFilter: true},
{
title: "insertamum",
field: "insertamum",
visible: false,
+ headerFilter: true,
formatter: function (cell) {
const dateStr = cell.getValue();
const date = new Date(dateStr);
@@ -87,11 +89,12 @@ export default {
});
}
},
- {title: "updatevon", field: "updatevon", visible: false},
+ {title: "updatevon", field: "updatevon", visible: false, headerFilter: true},
{
title: "updateamum",
field: "updateamum",
visible: false,
+ headerFilter: true,
formatter: function (cell) {
const dateStr = cell.getValue();
const date = new Date(dateStr);
@@ -148,7 +151,7 @@ export default {
],
layout: 'fitColumns',
layoutColumnsOnNewData: false,
- height: '200',
+ height: '250',
selectableRowsRangeMode: 'click',
selectableRows: true,
},
diff --git a/public/js/components/Vertraege/List/Unassigned.js b/public/js/components/Vertraege/List/Unassigned.js
index 655a2b078..1b4b728e7 100644
--- a/public/js/components/Vertraege/List/Unassigned.js
+++ b/public/js/components/Vertraege/List/Unassigned.js
@@ -30,10 +30,11 @@ export default {
),
ajaxResponse: (url, params, response) => response.data,
columns: [
- {title: "Typ", field: "type", width: 100},
+ {title: "Typ", field: "type", width: 100, headerFilter: "list", headerFilterParams: {valuesLookup:true, listOnEmpty:true, autocomplete:true, sort:"asc"}},
{
title: "Betrag",
field: "betrag1",
+ headerFilter: true,
formatter: function(cell) {
let value = cell.getValue();
if (value == null) {
@@ -41,28 +42,29 @@ export default {
}
return parseFloat(value).toFixed(2);
}},
- {title: "Bezeichnung", field: "bezeichnung", width: 150},
- {title: "Studiensemester", field: "studiensemester_kurzbz", width: 160},
- {title: "mitarbeiter_uid", field: "mitarbeiter_uid", visible: false},
- {title: "projektarbeit_id", field: "projektarbeit_id", visible: false},
- {title: "lehreinheit_id", field: "lehreinheit_id", visible: true},
- {title: "betreuerart_kurzbz", field: "betreuerart_kurzbz", visible: false},
- {title: "Vertragsstunden", field: "vertragsstunden", visible: false},
- {title: "vertrag_id", field: "vertrag_id", visible: false}, //just for testing
+ {title: "Bezeichnung", field: "bezeichnung", width: 150, headerFilter: true},
+ {title: "Studiensemester", field: "studiensemester_kurzbz", width: 160, headerFilter: "list", headerFilterParams: {valuesLookup:true, listOnEmpty:true, autocomplete:true, sort:"asc"}},
+ {title: "mitarbeiter_uid", field: "mitarbeiter_uid", visible: false, headerFilter: true},
+ {title: "projektarbeit_id", field: "projektarbeit_id", visible: false, headerFilter: true},
+ {title: "lehreinheit_id", field: "lehreinheit_id", visible: true, headerFilter: true},
+ {title: "betreuerart_kurzbz", field: "betreuerart_kurzbz", visible: false, headerFilter: true},
+ {title: "Vertragsstunden", field: "vertragsstunden", visible: false, headerFilter: true},
+ {title: "vertrag_id", field: "vertrag_id", visible: false, headerFilter: true}, //just for testing
{
title: "VertragsstundenStudiensemester",
field: "vertragsstunden_studiensemester_kurzbz",
- visible: false
+ visible: false,
+ headerFilter: true
},
],
layout: 'fitColumns',
layoutColumnsOnNewData: false,
- height: 150,
+ height: 250,
selectableRowsRangeMode: 'click',
selectableRows: true,
selectableRowsRollingSelection: false, //only allow multiselect with STRG
index: "lehreinheit_id",
- persistenceID: 'core-contracts-unassigned-2026021701'
+ persistenceID: 'core-contracts-unassigned-2026050501'
},
tabulatorEvents: [
{
@@ -100,7 +102,7 @@ export default {
setHeader('type', this.$p.t('global', 'typ'));
setHeader('bezeichnung', this.$p.t('ui', 'bezeichnung'));
- setHeader('lehreinheit_id', this.$p.t('ui', 'lehreinheit_id'));
+ setHeader('lehreinheit_id', this.$p.t('lehre', 'lehreinheit_id'));
setHeader('betrag1', this.$p.t('ui', 'betrag'));
setHeader('studiensemester_kurzbz', this.$p.t('lehre', 'studiensemester'));
setHeader('mitarbeiter_uid', this.$p.t('ui', 'mitarbeiter_uid'));
diff --git a/public/js/components/Vertraege/Vertraege.js b/public/js/components/Vertraege/Vertraege.js
index d4d65e428..b166e71ba 100644
--- a/public/js/components/Vertraege/Vertraege.js
+++ b/public/js/components/Vertraege/Vertraege.js
@@ -20,9 +20,6 @@ export default {
ContractStati
},
inject: {
-/* cisRoot: {
- from: 'cisRoot'
- },*/
hasSchreibrechte: {
from: 'hasSchreibrechte',
default: false
@@ -54,9 +51,9 @@ export default {
),
ajaxResponse: (url, params, response) => response.data,
columns: [
- {title: "Bezeichnung", field: "bezeichnung", width: 300},
+ {title: "Bezeichnung", field: "bezeichnung", width: 300, headerFilter: true},
{
- title: "Betrag", field: "betrag", width: 100,
+ title: "Betrag", field: "betrag", width: 100, headerFilter: true,
formatter: function (cell) {
let value = cell.getValue();
@@ -66,12 +63,13 @@ export default {
return parseFloat(value).toFixed(2);
}
},
- {title: "Vertragstyp", field: "vertragstyp_bezeichnung", width: 125},
- {title: "Status", field: "status", width: 100},
+ {title: "Vertragstyp", field: "vertragstyp_bezeichnung", width: 125, headerFilter: "list", headerFilterParams: {valuesLookup:true, listOnEmpty:true, autocomplete:true, sort:"asc"}},
+ {title: "Status", field: "status", width: 100, headerFilter: "list", headerFilterParams: {valuesLookup:true, listOnEmpty:true, autocomplete:true, sort:"asc"}},
{
title: "Vertragsdatum",
field: "vertragsdatum",
width: 128,
+ headerFilter: true,
formatter: function (cell) {
const dateStr = cell.getValue();
const date = new Date(dateStr);
@@ -82,11 +80,11 @@ export default {
});
}
},
- {title: "VertragId", field: "vertrag_id", visible: false},
- {title: "Vertragsstunden", field: "vertragsstunden", visible: false},
- {title: "VertragsstundenStudiensemester", field: "vertragsstunden_studiensemester_kurzbz", visible: false},
- {title: "Anmerkung", field: "anmerkung", visible: false},
- {title: "isAbgerechnet", field: "isabgerechnet", visible: false},
+ {title: "VertragId", field: "vertrag_id", visible: false, headerFilter: true},
+ {title: "Vertragsstunden", field: "vertragsstunden", visible: false, headerFilter: true},
+ {title: "VertragsstundenStudiensemester", field: "vertragsstunden_studiensemester_kurzbz", visible: false, headerFilter: true},
+ {title: "Anmerkung", field: "anmerkung", visible: false, headerFilter: true},
+ {title: "isAbgerechnet", field: "isabgerechnet", visible: false, headerFilter: true},
{
title: 'Aktionen', field: 'actions',
minWidth: 150,
@@ -140,11 +138,13 @@ export default {
columns: true,
filter: false //to avoids js errors
},
- persistenceID: 'core-contracts-2026021701',
+ persistenceID: 'core-contracts-2026050501',
};
return options;
},
tabulatorEvents() {
+ const vm = this;
+
const events = [
{
event: 'tableBuilt',
@@ -177,28 +177,11 @@ export default {
setHeader('actions', this.$p.t('global', 'aktionen'));
}
},
-/* {
- //is just enabled for ADDON Injection KU: MultiprintHonorarvertrag
- //(maybe enable also for ADDON FH Burgenland: MultiAccept later)
- event: 'rowClick',
- handler: (e, row) => {
- if (this.dataPrintHonorar != null && this.dataPrintHonorar.multiselect != null) {
- const selectedContract = row.getData().vertrag_id;
- const status = row.getData().status;
- const bezeichnung = row.getData().bezeichnung;
-
- this.toggleRowClick(selectedContract, status, bezeichnung);
- }
- }
- },*/
{
event: 'rowClick',
- handler: (e, row) => {
- if (!this.dataPrintHonorar?.multiselect) return;
-
+ handler: function (e, row) {
const { vertrag_id, status, bezeichnung, vertragstyp_bezeichnung } = row.getData();
-
- this.toggleRowClick(e, vertrag_id, status, bezeichnung, vertragstyp_bezeichnung);
+ vm.toggleRowClick(e, vertrag_id, status, bezeichnung, vertragstyp_bezeichnung);
}
},
{
@@ -242,8 +225,6 @@ export default {
person_id() {
this.$refs.table.reloadTable();
this.arraySelectedContracts = [];
-/* if(this.dataPrintHonorar?.multiselect)
- this.dataPrintHonorar.multiselect = [];*/
},
},
methods: {
@@ -270,7 +251,6 @@ export default {
)
.then(result => {
this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successDelete'));
- //window.scrollTo(0, 0);
this.reload();
this.contractSelected.vertrag_id = null;
})
@@ -518,19 +498,9 @@ export default {
'content/pdfExport.php?xml=' + this.dataPrintHonorar.xml + '&xsl=' + this.dataPrintHonorar.xsl + '&mitarbeiter_uid=' + this.mitarbeiter_uid + vertragString + '&output=pdf&uid=' + this.mitarbeiter_uid;
window.open(linkToPdf, '_blank');
},
-/* toggleRowClick(contractId, status, bezeichnung) {
- const index = this.arraySelectedContracts.findIndex(
- ([id]) => id === contractId
- );
- if (index !== -1) {
- this.arraySelectedContracts.splice(index, 1);
- } else {
- this.arraySelectedContracts.push([contractId, status, bezeichnung]);
- }
- },*/
toggleRowClick(event, vertrag_id, status, bezeichnung, vertragstyp_bezeichnung) {
- if (!this.dataPrintHonorar?.multiselect) return;
+ const isMulti = this.dataPrintHonorar?.multiselect === true;
const isCtrl = event.ctrlKey || event.metaKey;
const entry = {
@@ -540,28 +510,29 @@ export default {
vertragstyp_bezeichnung
};
- // Single click
- if (!isCtrl) {
+ // allow MultiSelect just in case event multiActionPrintHonorarvertrag
+ const allowMultiClick = isMulti && isCtrl;
+
+ if (!allowMultiClick) {
this.arraySelectedContracts = [entry];
+
+ //just mark last selected row as selected
+ this.$refs.table.tabulator.deselectRow();
+ this.$refs.table.tabulator.selectRow(vertrag_id);
return;
}
- // CTRL / CMD → toggle
const index = this.arraySelectedContracts.findIndex(
e => e.vertrag_id === vertrag_id
);
if (index === -1) {
this.arraySelectedContracts.push(entry);
- //this.arraySelectedContracts.push([entry.vertrag_id, entry.status, entry.bezeichnung, entry.vertragstyp_bezeichnung]);
} else {
this.arraySelectedContracts.splice(index, 1);
}
- },
-/* clearSelection(){
- this.arraySelectedContracts = [];
- this.$refs.table.tabulator.deselectRow();
- }*/
+
+ }
},
created() {
Promise.all([
@@ -587,88 +558,6 @@ export default {
});
this.getFormattedDate();
},
- /*
- TODO(Manu) delete after check
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- */
template: `
diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php
index 0476db2c9..5f6269365 100644
--- a/system/phrasesupdate.php
+++ b/system/phrasesupdate.php
@@ -41761,7 +41761,7 @@ array(
array(
'app' => 'core',
'category' => 'abgabetool',
- 'phrase' => 'c4fehlerAktualitaetProjektarbeit ',
+ 'phrase' => 'c4fehlerAktualitaetProjektarbeit',
'insertvon' => 'system',
'phrases' => array(
array(