diff --git a/application/controllers/Cis/Abgabetool.php b/application/controllers/Cis/Abgabetool.php
index e00bbe837..e7d183f04 100644
--- a/application/controllers/Cis/Abgabetool.php
+++ b/application/controllers/Cis/Abgabetool.php
@@ -13,8 +13,10 @@ class Abgabetool extends Auth_Controller
public function __construct()
{
parent::__construct([
- 'index' => ['basis/cis:r'],
- 'getStudentProjektarbeitAbgabeFile' => ['basis/cis:r']
+ 'index' => self::PERM_LOGGED,
+ 'getStudentProjektarbeitAbgabeFile' => self::PERM_LOGGED,
+ 'Mitarbeiter' => self::PERM_LOGGED,
+ 'Student' => self::PERM_LOGGED
]);
}
@@ -33,7 +35,28 @@ class Abgabetool extends Auth_Controller
$this->load->view('CisRouterView/CisRouterView.php', ['viewData' => $viewData, 'route' => 'Abgabetool']);
}
-
+
+ public function Student()
+ {
+
+ $viewData = array(
+ 'uid'=>getAuthUID(),
+ );
+
+ $this->load->view('CisRouterView/CisRouterView.php', ['viewData' => $viewData, 'route' => 'Abgabetool']);
+ }
+
+ public function Mitarbeiter()
+ {
+
+ $viewData = array(
+ 'uid'=>getAuthUID(),
+ );
+
+ $this->load->view('CisRouterView/CisRouterView.php', ['viewData' => $viewData, 'route' => 'Abgabetool']);
+ }
+
+
public function getStudentProjektarbeitAbgabeFile()
{
$this->_ci =& get_instance();
diff --git a/application/controllers/api/frontend/v1/Lehre.php b/application/controllers/api/frontend/v1/Lehre.php
index b28bd2d45..a6c593d3a 100644
--- a/application/controllers/api/frontend/v1/Lehre.php
+++ b/application/controllers/api/frontend/v1/Lehre.php
@@ -42,7 +42,8 @@ class Lehre extends FHCAPI_Controller
'getStudentProjektarbeiten' => self::PERM_LOGGED, // TODO: abgabetool berechtigung?
'getStudentProjektabgaben' => self::PERM_LOGGED,
'postStudentProjektarbeitZwischenabgabe' => self::PERM_LOGGED,
- 'postStudentProjektarbeitEndupload' => self::PERM_LOGGED
+ 'postStudentProjektarbeitEndupload' => self::PERM_LOGGED,
+ 'getMitarbeiterProjektarbeiten' => self::PERM_LOGGED
]);
$this->load->library('PhrasesLib');
@@ -443,5 +444,34 @@ class Lehre extends FHCAPI_Controller
}
}
}
+
+ public function getMitarbeiterProjektarbeiten() {
+ $this->load->model('education/Projektarbeit_model', 'ProjektarbeitModel');
+
+// if (!isset($uid) || isEmptyString($uid))
+// $this->terminateWithError($this->p->t('global', 'wrongParameters'), 'general');
+
+ $boolParamStr = $this->input->get('showall');
+ $trueStrings = ['true', '1'];
+ $falseStrings = ['false', '0'];
+
+ // Handle missing or invalid parameter
+ if ($boolParamStr === null) {
+ $this->terminateWithError($this->p->t('global', 'wrongParameters'), 'general');
+ }
+ $boolParamStrLower = strtolower($boolParamStr);
+
+ if (in_array($boolParamStrLower, $trueStrings, true)) {
+ $showAllBool = true;
+ } elseif (in_array($boolParamStrLower, $falseStrings, true)) {
+ $showAllBool = false;
+ } else {
+// $this->terminateWithError($this->p->t('global', 'wrongParameters'), 'general');
+ }
+
+ $projektarbeiten = $this->ProjektarbeitModel->getMitarbeiterProjektarbeiten(getAuthUID(), $showAllBool);
+
+ $this->terminateWithSuccess(array($projektarbeiten, DOMAIN));
+ }
}
diff --git a/application/models/education/Projektarbeit_model.php b/application/models/education/Projektarbeit_model.php
index c9c2b6b73..fb5c62149 100644
--- a/application/models/education/Projektarbeit_model.php
+++ b/application/models/education/Projektarbeit_model.php
@@ -211,4 +211,34 @@ class Projektarbeit_model extends DB_Model
return $this->execReadOnlyQuery($qry, array($studentUID, $maUID));
}
+
+ public function getMitarbeiterProjektarbeiten($uid, $showAll){
+ $qry = "SELECT
+ *
+ FROM
+ (SELECT tbl_person.vorname, tbl_person.nachname, tbl_studiengang.typ, tbl_studiengang.kurzbz,
+ tbl_projektarbeit.projekttyp_kurzbz, tbl_projekttyp.bezeichnung, tbl_projektarbeit.titel, tbl_projektarbeit.projektarbeit_id,
+ tbl_projektbetreuer.betreuerart_kurzbz, tbl_betreuerart.beschreibung AS betreuerart_beschreibung,
+ tbl_benutzer.uid, tbl_student.matrikelnr, tbl_lehreinheit.studiensemester_kurzbz
+ FROM lehre.tbl_projektarbeit
+ LEFT JOIN lehre.tbl_projektbetreuer using(projektarbeit_id)
+ LEFT JOIN lehre.tbl_betreuerart using(betreuerart_kurzbz)
+ LEFT JOIN public.tbl_benutzer on(uid=student_uid)
+ LEFT JOIN public.tbl_student on(public.tbl_benutzer.uid=public.tbl_student.student_uid)
+ LEFT JOIN public.tbl_person on(tbl_benutzer.person_id=tbl_person.person_id)
+ LEFT JOIN lehre.tbl_lehreinheit using(lehreinheit_id)
+ LEFT JOIN lehre.tbl_lehrveranstaltung using(lehrveranstaltung_id)
+ LEFT JOIN public.tbl_studiengang on(lehre.tbl_lehrveranstaltung.studiengang_kz=public.tbl_studiengang.studiengang_kz)
+ LEFT JOIN lehre.tbl_projekttyp USING (projekttyp_kurzbz)
+ WHERE (projekttyp_kurzbz='Bachelor' OR projekttyp_kurzbz='Diplom')
+ AND tbl_projektbetreuer.person_id IN (SELECT person_id FROM public.tbl_benutzer
+ WHERE public.tbl_benutzer.person_id=lehre.tbl_projektbetreuer.person_id
+ AND public.tbl_benutzer.uid= ? )
+ ".($showAll?'':' AND public.tbl_benutzer.aktiv AND lehre.tbl_projektarbeit.note IS NULL ')."
+ AND betreuerart_kurzbz IN ('Betreuer', 'Begutachter', 'Erstbegutachter', 'Zweitbegutachter', 'Erstbetreuer', 'Senatsvorsitz', 'Senatsmitglied')
+ ORDER BY tbl_projektarbeit.projektarbeit_id, betreuerart_kurzbz desc) as xy
+ ORDER BY nachname;";
+
+ return $this->execReadOnlyQuery($qry, array($uid));
+ }
}
diff --git a/public/js/api/lehre.js b/public/js/api/lehre.js
index 785b6abcf..cd8c911e2 100644
--- a/public/js/api/lehre.js
+++ b/public/js/api/lehre.js
@@ -48,5 +48,11 @@ export default {
const url = `/Cis/Abgabetool/getStudentProjektarbeitAbgabeFile?paabgabe_id=${paabgabe_id}&student_uid=${student_uid}`;
window.location = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + url
+ },
+ getMitarbeiterProjektarbeiten(uid, all) {
+ return this.$fhcApi.get(
+ `/api/frontend/v1/Lehre/getMitarbeiterProjektarbeiten?showall=${all}`
+ , {}
+ );
}
}
\ No newline at end of file
diff --git a/public/js/apps/Dashboard/Fhc.js b/public/js/apps/Dashboard/Fhc.js
index 0b50891b9..457d57e63 100644
--- a/public/js/apps/Dashboard/Fhc.js
+++ b/public/js/apps/Dashboard/Fhc.js
@@ -11,7 +11,8 @@ import CmsNews from "../../components/Cis/Cms/News.js";
import CmsContent from "../../components/Cis/Cms/Content.js";
import Info from "../../components/Cis/Mylv/Semester/Studiengang/Lv/Info.js";
import RoomInformation, { DEFAULT_MODE_RAUMINFO } from "../../components/Cis/Mylv/RoomInformation.js";
-import Abgabetool from "../../components/Cis/Abgabetool/Abgabetool";
+import AbgabetoolStudent from "../../components/Cis/Abgabetool/AbgabetoolStudent.js";
+import AbgabetoolMitarbeiter from "../../components/Cis/Abgabetool/AbgabetoolMitarbeiter.js";
const ciPath = FHC_JS_DATA_STORAGE_OBJECT.app_root.replace(/(https:|)(^|\/\/)(.*?\/)/g, '') + FHC_JS_DATA_STORAGE_OBJECT.ci_router;
@@ -31,9 +32,15 @@ const router = VueRouter.createRouter({
props: true
},
{
- path: `/Cis/Abgabetool`,
- name: 'Abgabetool',
- component: Abgabetool,
+ path: `/Cis/Abgabetool/Student`,
+ name: 'AbgabetoolStudent',
+ component: AbgabetoolStudent,
+ props: true
+ },
+ {
+ path: `/Cis/Abgabetool/Mitarbeiter`,
+ name: 'AbgabetoolMitarbeiter',
+ component: AbgabetoolMitarbeiter,
props: true
},
{
@@ -211,8 +218,6 @@ const router = VueRouter.createRouter({
]
})
-
-
const app = Vue.createApp({
name: 'FhcApp',
data: () => ({
diff --git a/public/js/components/Cis/Abgabetool/AbgabeMitarbeiterDetail.js b/public/js/components/Cis/Abgabetool/AbgabeMitarbeiterDetail.js
new file mode 100644
index 000000000..016e08464
--- /dev/null
+++ b/public/js/components/Cis/Abgabetool/AbgabeMitarbeiterDetail.js
@@ -0,0 +1,286 @@
+import BsModal from '../../Bootstrap/Modal.js';
+
+const today = new Date()
+export const AbgabeMitarbeiterDetail = {
+ name: "AbgabeMitarbeiterDetail",
+ components: {
+ BsModal,
+ InputNumber: primevue.inputnumber,
+ Checkbox: primevue.checkbox,
+ Dropdown: primevue.dropdown,
+ Textarea: primevue.textarea
+ },
+ props: {
+ projektarbeit: {
+ type: Object,
+ default: null
+ }
+ },
+ data() {
+ return {
+ eidAkzeptiert: false,
+ enduploadTermin: null,
+ allActiveLanguages: FHC_JS_DATA_STORAGE_OBJECT.server_languages,
+ form: Vue.reactive({
+ sprache: '',
+ abstract: '',
+ abstract_en: '',
+ schlagwoerter: '',
+ schlagwoerter_en: '',
+ kontrollschlagwoerter: '',
+ seitenanzahl: 1,
+ })
+ }
+ },
+ methods: {
+ openZusatzdatenModal(termin) {
+
+ },
+ save(termin) {
+ // TODO: api speichern termin
+ },
+ delete(termin) {
+ // TODO: api delete termin
+ },
+ validate: function(termin) {
+ if(!termin.file.length) {
+ this.$fhcAlert.alertWarning(this.$p.t('global/warningChooseFile'));
+ return false
+ }
+
+ return true;
+ },
+ downloadAbgabe(termin) {
+ this.$fhcApi.factory.lehre.getStudentProjektarbeitAbgabeFile(termin.paabgabe_id, this.projektarbeit.student_uid)
+ },
+ dateDiffInDays(datum, today){
+ const oneDayMs = 1000 * 60 * 60 * 24
+ return Math.round((new Date(datum) - new Date(today)) / oneDayMs)
+ },
+ getDateStyle(termin) {
+ const datum = new Date(termin.datum)
+ const abgabedatum = new Date(termin.abgabedatum)
+
+ // todo: rework styling but keep the color pattern logic
+ // https://wiki.fhcomplete.info/doku.php?id=cis:abgabetool_fuer_studierende
+ let color = 'white'
+ let fontColor = 'black'
+ if (termin.abgabedatum === null) {
+ if(datum < today) {
+ color = 'red'
+ fontColor = 'white'
+ } else if (datum > today && this.dateDiffInDays(datum, today) <= 12) {
+ color = 'yellow'
+ }
+ } else if(abgabedatum > datum) {
+ color = 'pink' // aka "hellrot"
+ fontColor = 'white'
+ } else {
+ color = 'green'
+ }
+
+ return 'font-color: ' + fontColor + '; background-color: ' + color
+ },
+ openBeurteilungLink(link) {
+ window.open(link, '_blank')
+ },
+ getOptionLabel(option) {
+ return option.sprache
+ }
+ },
+ watch: {
+ projektarbeit(newVal) {
+ // default select german if projektarbeit sprache was null
+ this.form.sprache = newVal.sprache ? this.allActiveLanguages.find(lang => lang.sprache == newVal.sprache) : this.allActiveLanguages.find(lang => lang.sprache == 'German')
+ this.form.abstract = newVal.abstract
+ this.form.abstract_en = newVal.abstract_en
+ this.form.schlagwoerter = newVal.schlagwoerter
+ this.form.schlagwoerter_en = newVal.schlagwoerter_en
+ this.form.kontrollschlagwoerter = newVal.kontrollschlagwoerter
+ this.form.seitenanzahl = newVal.seitenanzahl
+ }
+ },
+ computed: {
+ getEid() {
+ return this.$p.t('abgabetool/c4eidesstattlicheErklaerung')
+ },
+ getEnduploadErlaubt() {
+ return !this.eidAkzeptiert
+ }
+ },
+ created() {
+
+ },
+ mounted() {
+
+ },
+ template: `
+
+
+
{{$p.t('abgabetool/c4abgabeMitarbeiterbereich')}}
+
+
{{projektarbeit?.student}}
+
{{projektarbeit?.titel}}
+
{{projektarbeit?.zweitbegutachter}}
+
+
+
+
{{$p.t('abgabetool/c4fixtermin')}}
+
{{$p.t('abgabetool/c4zieldatum')}}
+
{{$p.t('abgabetool/c4abgabetyp')}}
+
{{$p.t('abgabetool/c4abgabekurzbz')}}
+
{{$p.t('abgabetool/c4abgabedatum')}}
+
+
+
+
+
+
+
+
+
+
+ {{ termin.datum?.split("-").reverse().join(".") }}
+
+
+
+
+ {{ termin.bezeichnung }}
+
+
+
+ {{ termin.kurzbz }}
+
+
+ {{ termin.abgabedatum?.split("-").reverse().join(".") }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{$p.t('abgabetool/c4enduploadZusatzdaten')}}
+
+
+
+
Student UID: {{ projektarbeit?.student_uid}}
+
+
+
+
+
Titel: {{ projektarbeit?.titel }}
+
+
+
+
+
+
{{$p.t('abgabetool/c4Sprache')}}
+
+
+
+
+
+
+
+
Kontrollierte Schlagwörter
+
+
+
+
+
+
{{$p.t('abgabetool/c4schlagwoerterGer')}}
+
+
+
+
+
+
+
{{$p.t('abgabetool/c4schlagwoerterEng')}}
+
+
+
+
+
+
+
{{$p.t('abgabetool/c4abstractGer')}}
+
+
+
+
+
+
+
{{$p.t('abgabetool/c4abstractEng')}}
+
+
+
+
+
+
+
{{$p.t('abgabetool/c4seitenanzahl')}}
+
+
+
+
+
+
+
+
+
+
+
{{ $p.t('abgabetool/c4gelesenUndAkzeptiert') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+`,
+};
+
+export default AbgabeMitarbeiterDetail;
diff --git a/public/js/components/Cis/Abgabetool/AbgabeDetail.js b/public/js/components/Cis/Abgabetool/AbgabeStudentDetail.js
similarity index 98%
rename from public/js/components/Cis/Abgabetool/AbgabeDetail.js
rename to public/js/components/Cis/Abgabetool/AbgabeStudentDetail.js
index 5daf1a2b7..513d4f0e5 100644
--- a/public/js/components/Cis/Abgabetool/AbgabeDetail.js
+++ b/public/js/components/Cis/Abgabetool/AbgabeStudentDetail.js
@@ -2,8 +2,8 @@ import Upload from '../../../components/Form/Upload/Dms.js';
import BsModal from '../../Bootstrap/Modal.js';
const today = new Date()
-export const AbgabeDetail = {
- name: "AbgabeDetail",
+export const AbgabeStudentDetail = {
+ name: "AbgabeStudentDetail",
components: {
Upload,
BsModal,
@@ -210,7 +210,7 @@ export const AbgabeDetail = {
{{ termin.kurzbz }}
{{ termin.abgabedatum?.split("-").reverse().join(".") }}
-
+
@@ -335,4 +335,4 @@ export const AbgabeDetail = {
`,
};
-export default AbgabeDetail;
+export default AbgabeStudentDetail;
diff --git a/public/js/components/Cis/Abgabetool/AbgabetoolMitarbeiter.js b/public/js/components/Cis/Abgabetool/AbgabetoolMitarbeiter.js
new file mode 100644
index 000000000..30344e4a0
--- /dev/null
+++ b/public/js/components/Cis/Abgabetool/AbgabetoolMitarbeiter.js
@@ -0,0 +1,326 @@
+import {CoreFilterCmpt} from "../../../components/filter/Filter.js";
+import AbgabeDetail from "./AbgabeMitarbeiterDetail.js";
+import VerticalSplit from "../../verticalsplit/verticalsplit.js"
+
+export const AbgabetoolMitarbeiter = {
+ name: "AbgabetoolMitarbeiter",
+ components: {
+ CoreFilterCmpt,
+ AbgabeDetail,
+ VerticalSplit
+ },
+ props: {
+ viewData: {
+ type: Object,
+ required: true,
+ default: () => ({name: '', uid: ''}),
+ validator(value) {
+ return value && value.name && value.uid
+ }
+ }
+ },
+ data() {
+ return {
+ showAll: false,
+ tabulatorUuid: Vue.ref(0),
+ selectedData: [],
+ domain: '',
+ student_uid: null,
+ detail: null,
+ detailOffset: 0,
+ projektarbeiten: null,
+ selectedProjektarbeit: null,
+ tableBuiltResolve: null,
+ tableBuiltPromise: null,
+ abgabeTableOptions: {
+ height: 300,
+ index: 'projektarbeit_id',
+ layout: 'fitDataStretch',
+ placeholder: this.$p.t('global/noDataAvailable'),
+ selectable: true,
+ columns: [
+ {
+ formatter: 'rowSelection',
+ titleFormatter: 'rowSelection',
+ titleFormatterParams: {
+ rowRange: "active" // Only toggle the values of the active filtered rows
+ },
+ hozAlign:"center",
+ headerSort: false,
+ frozen: true,
+ width: 70
+ },
+ {title: Vue.computed(() => this.$p.t('abgabetool/c4details')), field: 'details', formatter: this.detailFormatter, widthGrow: 1, tooltip: false},
+ {title: Vue.computed(() => this.$p.t('abgabetool/c4personenkennzeichen')), field: 'pkz', formatter: this.pkzTextFormatter, widthGrow: 1, tooltip: false},
+ {title: Vue.computed(() => this.$p.t('abgabetool/c4kontakt')), field: 'mail', formatter: this.mailFormatter, widthGrow: 1, tooltip: false},
+ {title: Vue.computed(() => this.$p.t('abgabetool/c4vorname')), field: 'vorname', formatter: this.centeredTextFormatter, widthGrow: 1},
+ {title: Vue.computed(() => this.$p.t('abgabetool/c4nachname')), field: 'nachname', formatter: this.centeredTextFormatter, widthGrow: 1},
+ {title: Vue.computed(() => this.$p.t('abgabetool/c4projekttyp')), field: 'projekttyp_kurzbz', formatter: this.centeredTextFormatter, widthGrow: 1},
+ {title: Vue.computed(() => this.$p.t('abgabetool/c4stg')), field: 'stg', formatter: this.centeredTextFormatter, widthGrow: 2},
+ {title: Vue.computed(() => this.$p.t('abgabetool/c4sem')), field: 'studiensemester_kurzbz', formatter: this.centeredTextFormatter, widthGrow: 1},
+ {title: Vue.computed(() => this.$p.t('abgabetool/c4titel')), field: 'titel', formatter: this.centeredTextFormatter, maxWidth: 500, widthGrow: 8},
+ {title: Vue.computed(() => this.$p.t('abgabetool/c4beteuerart')), field: 'betreuerart_beschreibung',formatter: this.centeredTextFormatter, widthGrow: 8}
+ ],
+ persistence: false,
+ },
+ abgabeTableEventHandlers: [{
+ event: "tableBuilt",
+ handler: async () => {
+ this.tableBuiltResolve()
+ }
+ },
+ {
+ event: "cellClick",
+ handler: async (e, cell) => {
+ debugger
+ if(cell.getColumn().getField() === "details") {
+ this.setDetailComponent(cell.getValue())
+ }
+ e.stopPropagation()
+
+ }
+ },
+ {
+ event: "rowClick",
+ handler: async (e, row) => {
+
+ debugger
+ e.stopPropagation()
+
+ }
+ },
+ {
+ event: "rowSelected",
+ handler: async (row) => {
+
+ debugger
+
+ }
+ },
+ {
+ event: "rowSelectionChanged",
+ handler: async(data) => {
+ this.selectedData = data
+ }
+ }
+ ]};
+ },
+ methods: {
+ showDeadlines(){
+ // TODO: open seperate view in new window containing all future deadlines for the employee
+ },
+ toggleShowAll(showall) {
+ this.showAll = showall
+ this.loadProjektarbeiten(showall, () => { this.$refs.abgabeTable?.tabulator.redraw(true) })
+ },
+ addSeries() {
+
+ },
+ isPastDate(date) {
+ return new Date(date) < new Date(Date.now())
+ },
+ setDetailComponent(details){
+ debugger
+ this.loadAbgaben(details).then((res)=> {
+ debugger
+ const pa = this.projektarbeiten?.retval?.find(projekarbeit => projekarbeit.projektarbeit_id == details.projektarbeit_id)
+ pa.abgabetermine = res.data.retval
+ pa.abgabetermine.forEach(termin => {
+ termin.file = []
+ termin.allowedToUpload = true
+
+ // TODO: fixtermin logic?
+ if(termin.bezeichnung == 'Endupload' && this.isPastDate(termin.datum)) {
+
+ // termin.allowedToUpload = false
+ } else {
+ // termin.allowedToUpload = true
+ }
+
+ })
+ pa.betreuer = this.buildBetreuer(pa)
+ pa.student_uid = details.student_uid
+ pa.student = `${pa.vorname} ${pa.nachname}`
+
+ this.selectedProjektarbeit = pa
+
+ Vue.nextTick(()=>{
+ this.$refs.verticalsplit.showBoth()
+ })
+
+ })
+ },
+ centeredTextFormatter(cell) {
+ const val = cell.getValue()
+ if(!val) return
+
+ return ''
+ },
+ detailFormatter(cell) {
+ return ''
+ },
+ mailFormatter(cell) {
+ const val = cell.getValue()
+ return ''
+ },
+ beurteilungFormatter(cell) {
+ const val = cell.getValue()
+ if(val) {
+ return ''
+ } else return '-'
+ },
+ pkzTextFormatter(cell) {
+ const val = cell.getValue()
+
+ return ''
+ },
+ tableResolve(resolve) {
+ this.tableBuiltResolve = resolve
+ },
+ buildMailToLink(abgabe) {
+ return 'mailto:' + abgabe.uid +'@'+ this.domain
+ },
+ buildPKZ(projekt) {
+ return `${projekt.uid} / ${projekt.matrikelnr}`
+ },
+ buildStg(projekt) {
+ return (projekt.typ + projekt.kurzbz)?.toUpperCase()
+ },
+ buildBetreuer(abgabe) {
+ return abgabe.betreuerart_beschreibung + ': ' + (abgabe.btitelpre ? abgabe.btitelpre + ' ' : '') + abgabe.bvorname + ' ' + abgabe.bnachname + (abgabe.btitelpost ? ' ' + abgabe.btitelpost : '')
+ },
+ setupData(data){
+ this.projektarbeiten = data[0]
+ this.domain = data[1]
+
+ const d = data[0]?.retval?.map(projekt => {
+ let mode = 'detailTermine'
+
+ return {
+ ...projekt,
+ details: {
+ student_uid: projekt.uid,
+ projektarbeit_id: projekt.projektarbeit_id,
+ },
+ pkz: this.buildPKZ(projekt),
+ beurteilung: projekt.beurteilungLink ?? null,
+ sem: projekt.studiensemester_kurzbz,
+ stg: this.buildStg(projekt),
+ mail: this.buildMailToLink(projekt),
+ typ: projekt.projekttyp_kurzbz,
+ titel: projekt.titel
+ }
+ })
+
+ this.$refs.abgabeTable.tabulator.setColumns(this.abgabeTableOptions.columns)
+ this.$refs.abgabeTable.tabulator.setData(d);
+ },
+ loadProjektarbeiten(all = false, callback) {
+ this.$fhcApi.factory.lehre.getMitarbeiterProjektarbeiten(this.viewData?.uid ?? null, all)
+ .then(res => {
+ if(res?.data) this.setupData(res.data)
+ }).finally(() => {
+ if(callback) {
+ callback()
+ }
+ })
+ },
+ loadAbgaben(details) {
+ return new Promise((resolve) => {
+ this.$fhcApi.factory.lehre.getStudentProjektabgaben(details)
+ .then(res => {
+ resolve(res)
+ })
+ })
+ },
+ handleUuidDefined(uuid) {
+ this.tabulatorUuid = uuid
+ },
+ calcMaxTableHeight() {
+ const tableID = this.tabulatorUuid ? ('-' + this.tabulatorUuid) : ''
+ const tableDataSet = document.getElementById('filterTableDataset' + tableID);
+ if(!tableDataSet) return
+ const rect = tableDataSet.getBoundingClientRect();
+
+ this.abgabeTableOptions.height = window.visualViewport.height - rect.top
+ this.$refs.abgabeTable.tabulator.setHeight(this.abgabeTableOptions.height)
+ },
+ async setupMounted() {
+ this.tableBuiltPromise = new Promise(this.tableResolve)
+ await this.tableBuiltPromise
+
+ this.loadProjektarbeiten()
+
+
+ this.$refs.verticalsplit.collapseBottom()
+ this.calcMaxTableHeight()
+
+ }
+ },
+ watch: {
+
+ },
+ computed: {
+
+ },
+ created() {
+
+ },
+ mounted() {
+ this.setupMounted()
+ },
+ template: `
+
+
+
+
{{$p.t('abgabetool/abgabetoolTitle')}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ `,
+};
+
+export default AbgabetoolMitarbeiter;
diff --git a/public/js/components/Cis/Abgabetool/Abgabetool.js b/public/js/components/Cis/Abgabetool/AbgabetoolStudent.js
similarity index 96%
rename from public/js/components/Cis/Abgabetool/Abgabetool.js
rename to public/js/components/Cis/Abgabetool/AbgabetoolStudent.js
index 6a34ff052..699be7de6 100644
--- a/public/js/components/Cis/Abgabetool/Abgabetool.js
+++ b/public/js/components/Cis/Abgabetool/AbgabetoolStudent.js
@@ -1,8 +1,8 @@
import {CoreFilterCmpt} from "../../../components/filter/Filter.js";
-import AbgabeDetail from "./AbgabeDetail";
+import AbgabeDetail from "./AbgabeStudentDetail.js";
-export const Abgabetool = {
- name: "Abgabetool",
+export const AbgabetoolStudent = {
+ name: "AbgabetoolStudent",
components: {
VueDatePicker,
CoreFilterCmpt,
@@ -33,8 +33,8 @@ export const Abgabetool = {
layout: 'fitColumns',
placeholder: this.$p.t('global/noDataAvailable'),
columns: [
- {title: Vue.computed(() => this.$p.t('abgabetool/c4details')), formatter: this.detailFormatter, field: 'details', widthGrow: 1, tooltip: false},
- {title: Vue.computed(() => this.$p.t('abgabetool/c4beurteilung')), formatter: this.beurteilungFormatter, field: 'beurteilung', widthGrow: 1, tooltip: false},
+ {title: Vue.computed(() => this.$p.t('abgabetool/c4details')), field: 'details', formatter: this.detailFormatter, widthGrow: 1, tooltip: false},
+ {title: Vue.computed(() => this.$p.t('abgabetool/c4beurteilung')), field: 'beurteilung', formatter: this.beurteilungFormatter, widthGrow: 1, tooltip: false},
{title: Vue.computed(() => this.$p.t('abgabetool/c4sem')), field: 'sem', formatter: this.centeredTextFormatter, widthGrow: 1},
{title: Vue.computed(() => this.$p.t('abgabetool/c4stg')), field: 'stg', formatter: this.centeredTextFormatter, widthGrow: 1},
{title: Vue.computed(() => this.$p.t('abgabetool/c4kontakt')), field: 'mail', formatter: this.mailFormatter, widthGrow: 1},
@@ -233,4 +233,4 @@ export const Abgabetool = {
`,
};
-export default Abgabetool;
+export default AbgabetoolStudent;
diff --git a/public/js/components/filter/Filter.js b/public/js/components/filter/Filter.js
index c6cb6cdb3..aea50a10e 100644
--- a/public/js/components/filter/Filter.js
+++ b/public/js/components/filter/Filter.js
@@ -74,7 +74,11 @@ export const CoreFilterCmpt = {
// TODO soll im master kommen?
idField: String,
parentIdField: String,
- countOnly: Boolean
+ countOnly: Boolean,
+ useSelectionSpan: {
+ type: Boolean,
+ default: true
+ }
},
data: function() {
return {
@@ -613,7 +617,7 @@ export const CoreFilterCmpt = {
-
+
{{ selectedData.length }} ausgewählt
Mit {{ selectedData.length }} ausgewählten:
diff --git a/public/js/components/verticalsplit/verticalsplit.js b/public/js/components/verticalsplit/verticalsplit.js
index 53a1833fb..e712d1ecb 100644
--- a/public/js/components/verticalsplit/verticalsplit.js
+++ b/public/js/components/verticalsplit/verticalsplit.js
@@ -1,4 +1,5 @@
export default {
+ name: 'VerticalSplit',
data: function() {
return {
availHeight: 0,
diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php
index dd874ddff..bfebd10cf 100644
--- a/system/phrasesupdate.php
+++ b/system/phrasesupdate.php
@@ -38177,6 +38177,126 @@ array(
)
)
),
+ array(
+ 'app' => 'core',
+ 'category' => 'abgabetool',
+ 'phrase' => 'c4personenkennzeichen',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => "Personenkennzeichen",
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => "Personal identity number",
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
+ array(
+ 'app' => 'core',
+ 'category' => 'abgabetool',
+ 'phrase' => 'c4vorname',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => "Vorname",
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => "First Name",
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
+ array(
+ 'app' => 'core',
+ 'category' => 'abgabetool',
+ 'phrase' => 'c4nachname',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => "Nachname",
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => 'Last Name',
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
+ array(
+ 'app' => 'core',
+ 'category' => 'abgabetool',
+ 'phrase' => 'c4betreuerart',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => "Betreuerart",
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => 'Supervisor type',
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
+ array(
+ 'app' => 'core',
+ 'category' => 'abgabetool',
+ 'phrase' => 'showAll',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => "Alle anzeigen",
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => 'Show All',
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
+ array(
+ 'app' => 'core',
+ 'category' => 'abgabetool',
+ 'phrase' => 'showDeadlines',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => "Deadlines anzeigen",
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => 'Show Deadlines',
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
array(
'app' => 'core',
'category' => 'abgabetool',