diff --git a/application/views/Studentenverwaltung.php b/application/views/Studentenverwaltung.php index 09d02bfbd..4d7181c65 100644 --- a/application/views/Studentenverwaltung.php +++ b/application/views/Studentenverwaltung.php @@ -7,7 +7,7 @@ 'vue3' => true, 'primevue3' => true, #'filtercomponent' => true, - 'tabulator5' => true, + 'tabulator6' => true, 'tinymce5' => true, 'phrases' => array( 'global', diff --git a/public/js/components/Betriebsmittel/Betriebsmittel.js b/public/js/components/Betriebsmittel/Betriebsmittel.js index 686caa1ac..dacee70c5 100644 --- a/public/js/components/Betriebsmittel/Betriebsmittel.js +++ b/public/js/components/Betriebsmittel/Betriebsmittel.js @@ -64,6 +64,7 @@ export default { ), ajaxResponse: (url, params, response) => response.data, persistenceID: 'core-betriebsmittel', + selectableRows: true, columns: [ {title: "Nummer", field: "nummer", width: 150}, {title: "PersonId", field: "person_id", visible: false}, diff --git a/public/js/components/Messages/Details/TableMessages.js b/public/js/components/Messages/Details/TableMessages.js index afcdf0d5c..6e7ea7af0 100644 --- a/public/js/components/Messages/Details/TableMessages.js +++ b/public/js/components/Messages/Details/TableMessages.js @@ -30,8 +30,6 @@ export default { personId: null, layoutColumnsOnNewData: false, height: '400', - selectable: 1, - selectableRangeMode: 'click', } }, methods: { @@ -131,6 +129,8 @@ export default { layout: 'fitDataStretchFrozen', index: 'message_id', persistenceID: 'core-message-2025112401', + selectableRows: 1, + selectableRowsRangeMode: 'click', columns: [ {title: "subject", field: "subject", headerFilter: true}, {title: "body", field: "body", formatter: "html", visible: false, headerFilter: true}, diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Anrechnungen/Anrechnungen.js b/public/js/components/Stv/Studentenverwaltung/Details/Anrechnungen/Anrechnungen.js index 88392337b..96c905f2b 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Anrechnungen/Anrechnungen.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Anrechnungen/Anrechnungen.js @@ -54,6 +54,7 @@ export default { height: '500', index: 'anrechnung_id', persistenceID: 'stv-details-anrechnungen-2025112401', + selectableRows: true, columns: [ {title: "anrechnung_id", field: "anrechnung_id", visible: false}, {title: "lehrveranstaltung_id", field: "lehrveranstaltung_id", visible: false}, diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Archiv.js b/public/js/components/Stv/Studentenverwaltung/Details/Archiv.js index 9f28a51a1..c63921c20 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Archiv.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Archiv.js @@ -96,7 +96,19 @@ export default { {title: "Akte Id", field: "akte_id", visible: false}, {title: this.$p.t('stv', 'archiv_title'), field: "titel"}, {title: this.$p.t('stv', 'archiv_description'), field: "bezeichnung"}, - {title: this.$p.t('stv', 'archiv_creation_date'), field: "erstelltam"}, + {title: this.$p.t('stv', 'archiv_creation_date'), field: "erstelltam", + formatter: function (cell) { + const dateStr = cell.getValue(); + if (!dateStr) return ""; + + const date = new Date(dateStr); + return date.toLocaleString("de-DE", { + day: "2-digit", + month: "2-digit", + year: "numeric", + hour12: false + }); + }}, { title: this.$p.t('stv', 'archiv_signiert'), field: "signiert", @@ -117,7 +129,22 @@ export default { crossElement: '' }, }, - {title: this.$p.t('stv', 'archiv_accepted_on_at'), field: "akzeptiertamum"}, + {title: this.$p.t('stv', 'archiv_accepted_on_at'), field: "akzeptiertamum", + formatter: function (cell) { + const dateStr = cell.getValue(); + if (!dateStr) return ""; + + const date = new Date(dateStr); + return date.toLocaleString("de-DE", { + day: "2-digit", + month: "2-digit", + year: "numeric", + hour: "2-digit", + minute: "2-digit", + second: "2-digit", + hour12: false + }); + }}, { title: this.$p.t('stv', 'archiv_gedruckt'), field: "gedruckt", diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Dokumente/List/Accepted.js b/public/js/components/Stv/Studentenverwaltung/Details/Dokumente/List/Accepted.js index f70e44392..572a8cd27 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Dokumente/List/Accepted.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Dokumente/List/Accepted.js @@ -20,7 +20,6 @@ export default { listDocuments: [], layoutColumnsOnNewData: false, height: 300, - selectable: true, } }, computed: { @@ -37,7 +36,8 @@ export default { }, layout: 'fitDataStretchFrozen', index: 'akte_id', - selectableRangeMode: 'click', + selectableRows: true, + selectableRowsRangeMode: 'click', persistenceID: 'stv-details-accepted-2026020401', columns: [ {title: "akte_id", field: "akte_id", visible: false}, diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Dokumente/List/Unaccepted.js b/public/js/components/Stv/Studentenverwaltung/Details/Dokumente/List/Unaccepted.js index c92d52d39..5ae9cef8d 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Dokumente/List/Unaccepted.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Dokumente/List/Unaccepted.js @@ -19,8 +19,6 @@ export default { return { layoutColumnsOnNewData: false, height: 300, - selectable: true, - selectableRangeMode: 'click', listDocuments: [], prestudentDocumentData: [], } @@ -35,8 +33,10 @@ export default { studiengang_kz: this.studiengang_kz}) ), ajaxResponse: (url, params, response) => response.data, - persistenceID: 'stv-details-unaccepted-2026020401', layout: 'fitDataStretchFrozen', + persistenceID: 'stv-details-unaccepted-2026020401', + selectableRows: true, + selectableRowsRangeMode: 'click', columns: [ {title: "Dokument", field: "bezeichnung"}, {title: "Kurzbz", field: "dokument_kurzbz", visible: false}, diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Kontakt/Contact.js b/public/js/components/Stv/Studentenverwaltung/Details/Kontakt/Contact.js index c9603b1e3..a17adb06f 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Kontakt/Contact.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Kontakt/Contact.js @@ -135,48 +135,6 @@ export default { }, tabulatorEvents() { const events = [ -/* { - event: 'tableBuilt', - handler: async() => { - await this.$p.loadCategory(['notiz','global','person']); - - let cm = this.$refs.table.tabulator.columnManager; - - cm.getColumnByField('kontakttypbeschreibung').component.updateDefinition({ - title: this.$p.t('global', 'typ') - }); - cm.getColumnByField('kontakt').component.updateDefinition({ - title: this.$p.t('global', 'kontakt') - }); - cm.getColumnByField('zustellung').component.updateDefinition({ - title: this.$p.t('person', 'zustellung') - }); - cm.getColumnByField('anmerkung').component.updateDefinition({ - title: this.$p.t('global', 'anmerkung') - }); - cm.getColumnByField('lastupdate').component.updateDefinition({ - title: this.$p.t('notiz', 'letzte_aenderung') - }); - cm.getColumnByField('name').component.updateDefinition({ - title: this.$p.t('person', 'firma') - }); - cm.getColumnByField('bezeichnung').component.updateDefinition({ - title: this.$p.t('person', 'standort') - }); - cm.getColumnByField('firma_id').component.updateDefinition({ - title: this.$p.t('ui', 'firma_id') - }); - cm.getColumnByField('kontakt_id').component.updateDefinition({ - title: this.$p.t('ui', 'kontakt_id') - }); - cm.getColumnByField('person_id').component.updateDefinition({ - title: this.$p.t('person', 'person_id') - }); - cm.getColumnByField('standort_id').component.updateDefinition({ - title: this.$p.t('ui', 'standort_id') - }); - } - }, */ { event: 'tableBuilt', handler: async() => { diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Konto.js b/public/js/components/Stv/Studentenverwaltung/Details/Konto.js index 54c1db6c4..333de2119 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Konto.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Konto.js @@ -127,8 +127,8 @@ export default { ajaxResponse: (url, params, response) => response.data, dataTree: true, columns: this.tabulatorColumns, - selectable: true, - selectableRangeMode: 'click', + selectableRows: true, + selectableRowsRangeMode: 'click', index: 'buchungsnr', persistenceID: 'stv-details-konto' }; diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Noten/Repeater.js b/public/js/components/Stv/Studentenverwaltung/Details/Noten/Repeater.js index a4cfeaafb..13fab4f47 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Noten/Repeater.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Noten/Repeater.js @@ -39,8 +39,38 @@ export default { { field: 'lv_bezeichnung', title: this.$p.t('lehre/lehrveranstaltung') }, { field: 'note_bezeichnung', title: this.$p.t('lehre/note') }, { field: 'insertvon', title: this.$p.t('profil/mitarbeiterIn'), visible: false }, - { field: 'benotungsdatum', title: this.$p.t('stv/grades_gradingdate'), visible: false }, - { field: 'freigabedatum', title: this.$p.t('stv/grades_approvaldate'), visible: false }, + { field: 'benotungsdatum', title: this.$p.t('stv/grades_gradingdate'), visible: false, + formatter: function (cell) { + const dateStr = cell.getValue(); + if (!dateStr) return ""; + + const date = new Date(dateStr); + return date.toLocaleString("de-DE", { + day: "2-digit", + month: "2-digit", + year: "numeric", + hour: "2-digit", + minute: "2-digit", + second: "2-digit", + hour12: false + }); + }}, + { field: 'freigabedatum', title: this.$p.t('stv/grades_approvaldate'), visible: false, + formatter: function (cell) { + const dateStr = cell.getValue(); + if (!dateStr) return ""; + + const date = new Date(dateStr); + return date.toLocaleString("de-DE", { + day: "2-digit", + month: "2-digit", + year: "numeric", + hour: "2-digit", + minute: "2-digit", + second: "2-digit", + hour12: false + }); + }}, { field: 'studiensemester_kurzbz', title: this.$p.t('lehre/studiensemester'), visible: false }, { field: 'stg_bezeichnung', title: this.$p.t('lehre/studiengang'), visible: false }, { field: 'note', title: this.$p.t('stv/grades_numericgrade'), visible: false }, @@ -49,8 +79,8 @@ export default { ], layout: 'fitDataStretch', height: '100%', - selectable: true, - selectableRangeMode: 'click', + selectableRows: true, + selectableRowsRangeMode: 'click', persistenceID: 'stv-details-noten-repeater' }; } diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Noten/Teacher.js b/public/js/components/Stv/Studentenverwaltung/Details/Noten/Teacher.js index e566d3a09..43961237e 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Noten/Teacher.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Noten/Teacher.js @@ -39,8 +39,38 @@ export default { { field: 'lehrveranstaltung_bezeichnung', title: this.$p.t('lehre/lehrveranstaltung') }, { field: 'note_bezeichnung', title: this.$p.t('lehre/note') }, { field: 'mitarbeiter_uid', title: this.$p.t('profil/mitarbeiterIn'), visible: false }, - { field: 'benotungsdatum', title: this.$p.t('stv/grades_gradingdate'), visible: false }, - { field: 'freigabedatum', title: this.$p.t('stv/grades_approvaldate'), visible: false }, + { field: 'benotungsdatum', title: this.$p.t('stv/grades_gradingdate'), visible: false, + formatter: function (cell) { + const dateStr = cell.getValue(); + if (!dateStr) return ""; + + const date = new Date(dateStr); + return date.toLocaleString("de-DE", { + day: "2-digit", + month: "2-digit", + year: "numeric", + hour: "2-digit", + minute: "2-digit", + second: "2-digit", + hour12: false + }); + }}, + { field: 'freigabedatum', title: this.$p.t('stv/grades_approvaldate'), visible: false, + formatter: function (cell) { + const dateStr = cell.getValue(); + if (!dateStr) return ""; + + const date = new Date(dateStr); + return date.toLocaleString("de-DE", { + day: "2-digit", + month: "2-digit", + year: "numeric", + hour: "2-digit", + minute: "2-digit", + second: "2-digit", + hour12: false + }); + }}, { field: 'studiensemester_kurzbz', title: this.$p.t('lehre/studiensemester'), visible: false }, { field: 'note', title: this.$p.t('stv/grades_numericgrade'), visible: false }, { field: 'student_uid', title: this.$p.t('profil/studentIn'), visible: false }, @@ -49,8 +79,8 @@ export default { ], layout: 'fitDataStretch', height: '100%', - selectable: true, - selectableRangeMode: 'click', + selectableRows: true, + selectableRowsRangeMode: 'click', persistenceID: 'stv-details-noten-teacher' }; } diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Noten/Zeugnis.js b/public/js/components/Stv/Studentenverwaltung/Details/Noten/Zeugnis.js index 4d0996b6b..81c2099f7 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Noten/Zeugnis.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Noten/Zeugnis.js @@ -148,8 +148,38 @@ export default { { field: 'zeugnis', title: this.$p.t('stv/grades_zeugnis'), formatter: 'tickCross' }, { field: 'lehrveranstaltung_bezeichnung', title: this.$p.t('lehre/lehrveranstaltung') }, gradeField, - { field: 'uebernahmedatum', title: this.$p.t('stv/grades_takeoverdate'), visible: false }, - { field: 'benotungsdatum', title: this.$p.t('stv/grades_gradingdate'), visible: false }, + { field: 'uebernahmedatum', title: this.$p.t('stv/grades_takeoverdate'), visible: false, + formatter: function (cell) { + const dateStr = cell.getValue(); + if (!dateStr) return ""; + + const date = new Date(dateStr); + return date.toLocaleString("de-DE", { + day: "2-digit", + month: "2-digit", + year: "numeric", + hour: "2-digit", + minute: "2-digit", + second: "2-digit", + hour12: false + }); + }}, + { field: 'benotungsdatum', title: this.$p.t('stv/grades_gradingdate'), visible: false, + formatter: function (cell) { + const dateStr = cell.getValue(); + if (!dateStr) return ""; + + const date = new Date(dateStr); + return date.toLocaleString("de-DE", { + day: "2-digit", + month: "2-digit", + year: "numeric", + hour: "2-digit", + minute: "2-digit", + second: "2-digit", + hour12: false + }); + }}, { field: 'studiensemester_kurzbz', title: this.$p.t('lehre/studiensemester'), visible: false }, { field: 'note_number', title: this.$p.t('stv/grades_numericgrade'), visible: false, formatter: cell => cell.getData().note, tooltip: (evt, cell) => cell.getData().note }, { field: 'lehrveranstaltung_id', title: this.$p.t('lehre/lehrveranstaltung_id'), visible: false }, @@ -218,8 +248,8 @@ export default { columns, height: '100%', layout: 'fitDataStretchFrozen', - selectable: 1, - selectableRangeMode: 'click', + selectableRows: 1, + selectableRowsRangeMode: 'click', persistenceID: 'stv-details-noten-zeugnis-2025112401', persistence:{ columns: ["width", "visible", "frozen"] diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Prestudent/History.js b/public/js/components/Stv/Studentenverwaltung/Details/Prestudent/History.js index ffca391dc..d884c9125 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Prestudent/History.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Prestudent/History.js @@ -15,7 +15,7 @@ export default{ layout: 'fitDataFill', layoutColumnsOnNewData: false, height: 'auto', - selectable: false + selectableRows: false } }, computed: { @@ -25,7 +25,7 @@ export default{ ajaxRequestFunc: () => this.$api.call(ApiStvPrestudent.getHistoryPrestudents(this.personId)), ajaxResponse: (url, params, response) => response.data, //autoColumns: true, - persistenceID: 'stv-details-prestudent-history', + persistenceID: 'stv-details-prestudent-history-20260204', columns:[ {title:"StSem", field:"studiensemester_kurzbz"}, {title:"Prio", field:"priorisierung"}, @@ -56,19 +56,23 @@ export default{ handler: async () => { await this.$p.loadCategory(['lehre']); - let cm = this.$refs.table.tabulator.columnManager; + const setHeader = (field, text) => { + const col = this.$refs.table.tabulator.getColumn(field); + if (!col) return; - cm.getColumnByField('orgform_kurzbz').component.updateDefinition({ - title: this.$p.t('lehre', 'organisationsform') - }); + const el = col.getElement(); + if (!el || !el.querySelector) return; - cm.getColumnByField('bezeichnung').component.updateDefinition({ - title: this.$p.t('lehre', 'studienplan') - }); + const titleEl = el.querySelector('.tabulator-col-title'); + if (titleEl) { + titleEl.textContent = text; + } + }; + + setHeader('orgform_kurzbz', this.$p.t('lehre', 'organisationsform')); + setHeader('bezeichnung', this.$p.t('lehre', 'studienplan')); + setHeader('prestudent_id', this.$p.t('ui', 'prestudent_id')); - cm.getColumnByField('prestudent_id').component.updateDefinition({ - title: this.$p.t('ui', 'prestudent_id') - }); } } ]; diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Prestudent/MultiStatus.js b/public/js/components/Stv/Studentenverwaltung/Details/Prestudent/MultiStatus.js index 5a2bda80a..f001ee6b6 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Prestudent/MultiStatus.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Prestudent/MultiStatus.js @@ -208,7 +208,7 @@ export default{ layout: 'fitDataStretchFrozen', layoutColumnsOnNewData: false, height: 'auto', - selectable: false, + selectableRows: false, index: 'statusId', persistenceID: 'stv-multistatus-2025112401' }; diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Projektarbeit.js b/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Projektarbeit.js index 57a18bf15..b95efcc5f 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Projektarbeit.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Projektarbeit.js @@ -260,7 +260,7 @@ export default { layout: 'fitDataStretchFrozen', height: 'auto', minHeight: '200', - selectable: 1, + selectableRows: 1, index: 'projektarbeit_id', persistence:{ columns: true, //persist column layout diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Projektbetreuer.js b/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Projektbetreuer.js index 6c39ba9ae..b22f1a368 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Projektbetreuer.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Projektarbeit/Projektbetreuer.js @@ -120,8 +120,8 @@ export default { layoutColumnsOnNewData: false, height: 'auto', minHeight: '100', - selectable: true, - selectable: 1, + selectableRows: true, + selectableRows: 1, index: 'betreuer_id', persistence:{ columns: true, //persist column layout diff --git a/public/js/components/Stv/Studentenverwaltung/Details/Pruefung/Pruefunglist.js b/public/js/components/Stv/Studentenverwaltung/Details/Pruefung/Pruefunglist.js index c58027338..47ebe495c 100644 --- a/public/js/components/Stv/Studentenverwaltung/Details/Pruefung/Pruefunglist.js +++ b/public/js/components/Stv/Studentenverwaltung/Details/Pruefung/Pruefunglist.js @@ -64,8 +64,21 @@ export default{ group: false, page: false }, + selectableRows: true, columns: [ - {title: "Datum", field: "format_datum"}, + {title: "Datum", field: "datum", + formatter: function (cell) { + const dateStr = cell.getValue(); + if (!dateStr) return ""; + + const date = new Date(dateStr); + return date.toLocaleString("de-DE", { + day: "2-digit", + month: "2-digit", + year: "numeric", + hour12: false + }); + }}, {title: "Lehrveranstaltung", field: "lehrveranstaltung_bezeichnung"}, {title: "Note", field: "note_bezeichnung"}, {title: "Anmerkung", field: "anmerkung"}, @@ -141,7 +154,7 @@ export default{ } }; - setHeader('format_datum', this.$p.t('global', 'datum')); + setHeader('datum', this.$p.t('global', 'datum')); setHeader('lehrveranstaltung_bezeichnung', this.$p.t('lehre', 'lehrveranstaltung')); setHeader('note_bezeichnung', this.$p.t('lehre', 'note')); setHeader('anmerkung', this.$p.t('global', 'anmerkung')); diff --git a/public/js/components/Stv/Studentenverwaltung/List.js b/public/js/components/Stv/Studentenverwaltung/List.js index 2dd1f24f4..26bfbcb2c 100644 --- a/public/js/components/Stv/Studentenverwaltung/List.js +++ b/public/js/components/Stv/Studentenverwaltung/List.js @@ -173,8 +173,8 @@ export default { layout: 'fitDataStretch', layoutColumnsOnNewData: false, height: '100%', - selectable: true, - selectableRangeMode: 'click', + selectableRows: true, + selectableRowsRangeMode: 'click', index: 'prestudent_id', persistenceID: 'stv-list', },