diff --git a/application/controllers/Cis/Abgabetool.php b/application/controllers/Cis/Abgabetool.php
new file mode 100644
index 000000000..6c4770421
--- /dev/null
+++ b/application/controllers/Cis/Abgabetool.php
@@ -0,0 +1,35 @@
+ ['basis/cis:r']
+ ]);
+ }
+
+ // -----------------------------------------------------------------------------------------------------------------
+ // Public methods
+
+ /**
+ * @return void
+ */
+ public function index()
+ {
+
+ $viewData = array(
+ 'uid'=>getAuthUID(),
+ );
+
+ $this->load->view('CisRouterView/CisRouterView.php', ['viewData' => $viewData, 'route' => 'Abgabetool']);
+ }
+}
diff --git a/application/controllers/api/frontend/v1/Lehre.php b/application/controllers/api/frontend/v1/Lehre.php
index f079a5b37..e41881df2 100644
--- a/application/controllers/api/frontend/v1/Lehre.php
+++ b/application/controllers/api/frontend/v1/Lehre.php
@@ -31,10 +31,9 @@ class Lehre extends FHCAPI_Controller
'lvStudentenMail' => self::PERM_LOGGED,
'LV' => self::PERM_LOGGED,
'Pruefungen' => self::PERM_LOGGED,
+ 'getStudentProjektarbeiten' => self::PERM_LOGGED, // TODO: abgabetool berechtigung?
+ 'getStudentProjektabgaben' => self::PERM_LOGGED
]);
-
-
-
}
//------------------------------------------------------------------------------------------------------------------
@@ -94,10 +93,36 @@ class Lehre extends FHCAPI_Controller
$this->terminateWithSuccess($result);
}
-
-
+ public function getStudentProjektabgaben() {
+ $projektarbeit_id = $this->input->get("projektarbeit_id",TRUE);
+ $this->load->model('education/Abgabe_model', 'AbgabeModel');
+ $ret = $this->AbgabeModel->getProjektarbeitAbgabetermine($projektarbeit_id);
+
+
+ $this->terminateWithSuccess($ret);
+ }
+
+ public function getStudentProjektarbeiten($uid)
+ {
+ $this->load->model('education/Abgabe_model', 'AbgabeModel');
+ $this->load->model('ressource/Mitarbeiter_model', 'MitarbeiterModel');
+
+ $isZugeteilterBetreuer = count($this->AbgabeModel->checkZuordnung($uid, getAuthUID())->retval) > 0;
+ $ret = $this->AbgabeModel->getStudentProjektarbeitenLegacy($uid);
+ $this->addMeta('legacyQueryRetval', $ret);
+ $this->addMeta('isZugeteilterBetreuer', $isZugeteilterBetreuer);
+
+ if ($this->MitarbeiterModel->isMitarbeiter(getAuthUID()) && ($isZugeteilterBetreuer)){
+ $projektarbeiten = $this->AbgabeModel->getStudentProjektarbeitenWithBetreuer($uid);
+ } else {
+ $projektarbeiten = $this->AbgabeModel->getStudentProjektarbeitenWithBetreuer(getAuthUID());
+ }
+
+
+ $this->terminateWithSuccess(array($projektarbeiten, DOMAIN));
+ }
}
diff --git a/application/models/education/Abgabe_model.php b/application/models/education/Abgabe_model.php
index c68bc55f4..0240beeb3 100644
--- a/application/models/education/Abgabe_model.php
+++ b/application/models/education/Abgabe_model.php
@@ -11,4 +11,144 @@ class Abgabe_model extends DB_Model
$this->dbTable = 'campus.tbl_abgabe';
$this->pk = 'abgabe_id';
}
+
+ public function checkZuordnung($studentUID, $maUID) {
+ //oder Lektor mit Betreuung dieses Studenten
+ $qry = "
+ SELECT 1
+ FROM
+ lehre.tbl_projektarbeit
+ JOIN lehre.tbl_projektbetreuer USING(projektarbeit_id)
+ JOIN campus.vw_benutzer on(vw_benutzer.person_id=tbl_projektbetreuer.person_id)
+ WHERE
+ tbl_projektarbeit.student_uid = ? AND
+ vw_benutzer.uid = ?";
+
+ return $this->execReadOnlyQuery($qry, array($studentUID, $maUID));
+ }
+
+ public function getProjektarbeitAbgabetermine($projektarbeit_id) {
+ $qry ="SELECT campus.tbl_paabgabe.paabgabe_id,
+ campus.tbl_paabgabe.projektarbeit_id,
+ campus.tbl_paabgabe.fixtermin,
+ campus.tbl_paabgabe.kurzbz,
+ campus.tbl_paabgabe.datum,
+ campus.tbl_paabgabetyp.bezeichnung,
+ campus.tbl_paabgabe.abgabedatum
+ FROM campus.tbl_paabgabe JOIN campus.tbl_paabgabetyp USING(paabgabetyp_kurzbz)
+ WHERE campus.tbl_paabgabe.projektarbeit_id = ?
+ ORDER BY campus.tbl_paabgabe.datum";
+
+ return $this->execReadOnlyQuery($qry, array($projektarbeit_id));
+ }
+
+ public function getStudentProjektarbeitenWithBetreuer($studentUID) {
+ $betreuerQuery = "
+ SELECT
+ vorname as bvorname,
+ nachname as bnachname,
+ titelpre as btitelpre,
+ titelpost AS btitelpost,
+ titelpost AS btitelpost,
+ tbl_betreuerart.beschreibung AS betreuerart_beschreibung,
+
+ (SELECT person_id
+ FROM lehre.tbl_projektbetreuer
+ WHERE projektarbeit_id=tbl_projektarbeit.projektarbeit_id
+ AND betreuerart_kurzbz IN ('Zweitbetreuer', 'Zweitbegutachter') LIMIT 1) AS zweitbetreuer_person_id,
+ (SELECT betreuerart_kurzbz
+ FROM lehre.tbl_projektbetreuer
+ WHERE projektarbeit_id=tbl_projektarbeit.projektarbeit_id
+ AND betreuerart_kurzbz IN ('Zweitbetreuer', 'Zweitbegutachter') LIMIT 1) AS zweitbetreuer_betreuerart_kurzbz,
+ (SELECT tbl_betreuerart.beschreibung
+ FROM lehre.tbl_projektbetreuer JOIN lehre.tbl_betreuerart USING(betreuerart_kurzbz)
+ WHERE projektarbeit_id=tbl_projektarbeit.projektarbeit_id
+ AND betreuerart_kurzbz IN ('Zweitbetreuer', 'Zweitbegutachter', 'Senatsmitglied') LIMIT 1) AS zweitbetreuer_betreuerart_beschreibung,
+
+ tbl_betreuerart.betreuerart_kurzbz,
+ person_id as bperson_id,
+ projektarbeit_id,
+ lehre.tbl_projekttyp.bezeichnung as projekttypbezeichnung,
+ lehre.tbl_lehreinheit.studiensemester_kurzbz,
+ lehre.tbl_lehrveranstaltung.studiengang_kz,
+ public.tbl_studiengang.kurzbzlang,
+ lehre.tbl_projektbetreuer.note as note,
+ public.tbl_mitarbeiter.mitarbeiter_uid,
+ lehre.tbl_projektarbeit.titel as titel,
+ (SELECT abgeschicktvon FROM extension.tbl_projektarbeitsbeurteilung WHERE projektarbeit_id = tbl_projektarbeit.projektarbeit_id AND betreuer_person_id = tbl_projektbetreuer.person_id) AS babgeschickt,
+ (SELECT abgeschicktvon FROM extension.tbl_projektarbeitsbeurteilung WHERE projektarbeit_id = tbl_projektarbeit.projektarbeit_id AND betreuerart_kurzbz IN ('Zweitbetreuer', 'Zweitbegutachter') LIMIT 1) AS zweitbetreuer_abgeschickt,
+ (SELECT datum FROM campus.tbl_paabgabe WHERE paabgabetyp_kurzbz = 'end' AND abgabedatum IS NOT NULL AND projektarbeit_id = tbl_projektarbeit.projektarbeit_id LIMIT 1) AS abgegeben
+
+ FROM lehre.tbl_projektarbeit
+ LEFT JOIN lehre.tbl_projektbetreuer USING(projektarbeit_id)
+ LEFT JOIN public.tbl_person USING(person_id)
+ LEFT JOIN public.tbl_benutzer USING(person_id)
+ LEFT JOIN lehre.tbl_projekttyp USING (projekttyp_kurzbz)
+ LEFT JOIN lehre.tbl_betreuerart USING(betreuerart_kurzbz)
+ LEFT JOIN lehre.tbl_lehreinheit USING(lehreinheit_id)
+ LEFT JOIN lehre.tbl_lehrveranstaltung USING(lehrveranstaltung_id)
+ LEFT JOIN public.tbl_mitarbeiter ON(public.tbl_mitarbeiter.mitarbeiter_uid = public.tbl_benutzer.uid)
+ LEFT JOIN public.tbl_studiengang USING(studiengang_kz)
+ WHERE
+ tbl_projektarbeit.student_uid = ? AND
+ (projekttyp_kurzbz='Bachelor' OR projekttyp_kurzbz='Diplom')
+ AND betreuerart_kurzbz IN ('Betreuer', 'Begutachter', 'Erstbegutachter', 'Senatsvorsitz')";
+
+ // TODO: fetch senatsmitglieder
+ return $this->execReadOnlyQuery($betreuerQuery, array($studentUID));
+ }
+
+ public function getStudentProjektarbeitenLegacy($studentUID)
+ {
+ $qry = "SELECT (SELECT nachname FROM public.tbl_person WHERE person_id=tbl_projektbetreuer.person_id) AS bnachname,
+ (SELECT vorname FROM public.tbl_person WHERE person_id=tbl_projektbetreuer.person_id) AS bvorname,
+ (SELECT titelpre FROM public.tbl_person WHERE person_id=tbl_projektbetreuer.person_id) AS btitelpre,
+ (SELECT titelpost FROM public.tbl_person WHERE person_id=tbl_projektbetreuer.person_id) AS btitelpost,
+ tbl_betreuerart.beschreibung AS betreuerart_beschreibung,
+ (SELECT person_id
+ FROM lehre.tbl_projektbetreuer
+ WHERE projektarbeit_id=tbl_projektarbeit.projektarbeit_id
+ AND betreuerart_kurzbz IN ('Zweitbetreuer', 'Zweitbegutachter') LIMIT 1) AS zweitbetreuer_person_id,
+ (SELECT betreuerart_kurzbz
+ FROM lehre.tbl_projektbetreuer
+ WHERE projektarbeit_id=tbl_projektarbeit.projektarbeit_id
+ AND betreuerart_kurzbz IN ('Zweitbetreuer', 'Zweitbegutachter') LIMIT 1) AS zweitbetreuer_betreuerart_kurzbz,
+ (SELECT tbl_betreuerart.beschreibung
+ FROM lehre.tbl_projektbetreuer JOIN lehre.tbl_betreuerart USING(betreuerart_kurzbz)
+ WHERE projektarbeit_id=tbl_projektarbeit.projektarbeit_id
+ AND betreuerart_kurzbz IN ('Zweitbetreuer', 'Zweitbegutachter', 'Senatsmitglied') LIMIT 1) AS zweitbetreuer_betreuerart_beschreibung,
+ tbl_projektbetreuer.person_id AS betreuer_person_id,
+ tbl_projekttyp.bezeichnung AS prjbez,
+ lehre.tbl_projektbetreuer.note as note,
+ public.tbl_benutzer.aktiv as aktiv,
+ (SELECT abgeschicktvon
+ FROM extension.tbl_projektarbeitsbeurteilung
+ WHERE projektarbeit_id = tbl_projektarbeit.projektarbeit_id
+ AND betreuer_person_id = tbl_projektbetreuer.person_id) AS babgeschickt,
+ (SELECT abgeschicktvon
+ FROM extension.tbl_projektarbeitsbeurteilung
+ WHERE projektarbeit_id = tbl_projektarbeit.projektarbeit_id
+ AND betreuerart_kurzbz IN ('Zweitbetreuer', 'Zweitbegutachter') LIMIT 1) AS zweitbetreuer_abgeschickt,
+ (SELECT datum FROM campus.tbl_paabgabe
+ WHERE paabgabetyp_kurzbz = 'end'
+ AND abgabedatum IS NOT NULL
+ AND projektarbeit_id = tbl_projektarbeit.projektarbeit_id LIMIT 1) AS abgegeben,
+ *
+FROM lehre.tbl_projektarbeit
+ LEFT JOIN lehre.tbl_projektbetreuer USING(projektarbeit_id)
+ LEFT JOIN public.tbl_benutzer ON(uid=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 USING(studiengang_kz)
+ LEFT JOIN lehre.tbl_projekttyp USING (projekttyp_kurzbz)
+ LEFT JOIN lehre.tbl_betreuerart USING(betreuerart_kurzbz)
+WHERE (projekttyp_kurzbz='Bachelor' OR projekttyp_kurzbz='Diplom')
+ AND betreuerart_kurzbz IN ('Betreuer', 'Begutachter', 'Erstbegutachter', 'Senatsvorsitz')
+ AND tbl_projektarbeit.student_uid= ?
+ORDER BY studiensemester_kurzbz desc, tbl_lehrveranstaltung.kurzbz";
+
+ return $this->execQuery($qry, array($studentUID));
+ }
+
}
diff --git a/public/css/Fhc.css b/public/css/Fhc.css
index 6e6a25200..b7110943d 100644
--- a/public/css/Fhc.css
+++ b/public/css/Fhc.css
@@ -131,8 +131,23 @@
transition: all 0.2s ease-in-out;
}
-fhcSkipLink:hover {
+.fhcSkipLink:hover {
background-color: #ffcc00;
color: #002b80;
transform: scale(1.05);
}
+
+.fhc-bullet::before {
+ content: "• ";
+ font-weight: bold;
+ display: inline-block;
+ transform: scale(2);
+}
+
+.fhc-bullet-red::before {
+ color: #ff001e;
+}
+
+.fhc-bullet-green::before {
+ color: #00ff26;
+}
\ No newline at end of file
diff --git a/public/js/api/lehre.js b/public/js/api/lehre.js
index cd7129d61..0020d3490 100644
--- a/public/js/api/lehre.js
+++ b/public/js/api/lehre.js
@@ -18,5 +18,19 @@ export default {
`/api/frontend/v1/Lehre/Pruefungen/${lehrveranstaltung_id}`
, {}
);
+ },
+ getStudentProjektarbeiten(uid) {
+ return this.$fhcApi.get(
+ `/api/frontend/v1/Lehre/getStudentProjektarbeiten/${uid}`
+ , {}
+ );
+ },
+ getStudentProjektabgaben(detail) {
+ return this.$fhcApi.get(
+ `/api/frontend/v1/Lehre/getStudentProjektabgaben`
+ , {
+ projektarbeit_id: detail.projektarbeit_id
+ }
+ );
}
}
\ No newline at end of file
diff --git a/public/js/apps/Dashboard/Fhc.js b/public/js/apps/Dashboard/Fhc.js
index 137d1d008..34494e324 100644
--- a/public/js/apps/Dashboard/Fhc.js
+++ b/public/js/apps/Dashboard/Fhc.js
@@ -11,6 +11,7 @@ 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";
const ciPath = FHC_JS_DATA_STORAGE_OBJECT.app_root.replace(/(https:|)(^|\/\/)(.*?\/)/g, '') + FHC_JS_DATA_STORAGE_OBJECT.ci_router;
@@ -29,6 +30,12 @@ const router = VueRouter.createRouter({
component: Profil,
props: true
},
+ // {
+ // path: `/Cis/Abgabetool`,
+ // name: 'Abgabetool',
+ // component: Abgabetool,
+ // props: true
+ // },
{
path: `/Cis/Raumsuche`,
name: 'Raumsuche',
@@ -204,6 +211,8 @@ const router = VueRouter.createRouter({
]
})
+
+
const app = Vue.createApp({
name: 'FhcApp',
data: () => ({
diff --git a/public/js/components/Cis/Abgabetool/AbgabeDetail.js b/public/js/components/Cis/Abgabetool/AbgabeDetail.js
new file mode 100644
index 000000000..a1c3de8ae
--- /dev/null
+++ b/public/js/components/Cis/Abgabetool/AbgabeDetail.js
@@ -0,0 +1,197 @@
+import Upload from '../../../components/Form/Upload/Dms.js';
+import BsModal from '../../Bootstrap/Modal.js';
+
+const today = new Date()
+export const AbgabeDetail = {
+ name: "AbgabeDetail",
+ components: {
+ Upload,
+ BsModal
+ },
+ props: {
+ projektarbeit: {
+ type: Object,
+ default: null
+ }
+ },
+ data() {
+ return {
+ file: []
+ }
+ },
+ methods: {
+ triggerUpload() {
+ // todo: trigger the loadup
+
+ this.$refs.modalContainerEnduploadZusatzdaten.hide()
+ },
+ upload(termin) {
+ console.log(termin)
+ // TODO load it up
+
+ if(termin.bezeichnung === 'Endupload') {
+ // open endupload form modal and await that it will be sent & checked
+
+ this.$refs.modalContainerEnduploadZusatzdaten.show()
+ }
+ },
+ 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)
+
+ // 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
+ }
+ },
+ watch: {
+ 'file'(newVal) {
+ if(newVal == [] || newVal === null || newVal === undefined) return
+
+ // check filetype on input change
+ const file = newVal[0]
+ if(!file) return
+
+ if(file.type && file.type.includes('pdf')) {
+ // all fine
+ } else {
+ // clear and alert for filetypes
+ this.$fhcAlert.alertInfo(this.$p.t('abgabetool/c4allowedFileTypes'))
+ this.entschuldigung.files = []
+ }
+
+ }
+ },
+ computed: {
+
+ },
+ created() {
+
+ },
+ mounted() {
+
+ },
+ template: `
+
+
+
{{$p.t('abgabetool/c4abgabeStudentenbereich')}}
+
+
{{projektarbeit?.betreuer}}
+
{{projektarbeit?.titel}}
+
+
+
+
{{$p.t('abgabetool/c4fixtermin')}}
+
{{$p.t('abgabetool/c4zieldatum')}}
+
{{$p.t('abgabetool/c4abgabetyp')}}
+
{{$p.t('abgabetool/c4abgabekurzbz')}}
+
{{$p.t('abgabetool/c4abgabedatum')}}
+
+ {{$p.t('abgabetool/c4fileupload')}}
+
+
+
+
+
+
+
{{ termin.datum?.split("-").reverse().join(".") }}
+
{{ termin.bezeichnung }}
+
{{ termin.kurzbz }}
+
{{ termin.abgabedatum?.split("-").reverse().join(".") }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{$p.t('abgabetool/c4enduploadZusatzdaten')}}
+
+
+
+
+ student uid
+
+
+
+
+ {{ projektarbeit?.titel }}
+
+
+
+
+
+
+ Sprache der Arbeit
+
+
+
+
+ Kontrollierte Schlagwörter
+
+
+
+
+ Dt. Schlagwörter
+
+
+
+
+ Engl. Schlagwörter
+
+
+
+
+ Abstract max 5k characters
+
+
+
+
+ Abstract eng max 5k chars
+
+
+
+
+ Seitenanzahl
+
+
+
+
+
+
+
+
+ `,
+};
+
+export default AbgabeDetail;
diff --git a/public/js/components/Cis/Abgabetool/Abgabetool.js b/public/js/components/Cis/Abgabetool/Abgabetool.js
new file mode 100644
index 000000000..b1ab65181
--- /dev/null
+++ b/public/js/components/Cis/Abgabetool/Abgabetool.js
@@ -0,0 +1,205 @@
+import {CoreFilterCmpt} from "../../../components/filter/Filter.js";
+import AbgabeDetail from "./AbgabeDetail";
+
+export const Abgabetool = {
+ name: "Abgabetool",
+ components: {
+ VueDatePicker,
+ CoreFilterCmpt,
+ AbgabeDetail
+ },
+ props: {
+ viewData: {
+ type: Object,
+ required: true,
+ default: () => ({name: '', uid: ''}),
+ validator(value) {
+ return value && value.name && value.uid
+ }
+ }
+ },
+ data() {
+ return {
+ domain: '',
+ detail: null,
+ selectedProjektarbeit: null,
+ tableBuiltResolve: null,
+ tableBuiltPromise: null,
+ abgabeTableOptions: {
+ height: 200, // TODO: determine smallest necessary height
+ index: 'projektarbeit_id',
+ 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/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},
+ {title: Vue.computed(() => this.$p.t('abgabetool/c4betreuer')), field: 'betreuer', formatter: this.centeredTextFormatter,widthGrow: 2},
+ {title: Vue.computed(() => this.$p.t('abgabetool/c4projekttyp')), field: 'typ', formatter: this.centeredTextFormatter, widthGrow: 1},
+ {title: Vue.computed(() => this.$p.t('abgabetool/c4titel')), field: 'titel', formatter: this.centeredTextFormatter, widthGrow: 8}
+ ],
+ persistence: false,
+ },
+ abgabeTableEventHandlers: [{
+ event: "tableBuilt",
+ handler: async () => {
+ this.tableBuiltResolve()
+ }
+ },
+ {
+ event: "cellClick",
+ handler: async (e, cell) => {
+
+ if(cell.getColumn().getField() === "details") {
+ const val = cell.getValue()
+ if(val.mode === 'detailTermine') {
+ this.setDetailComponent(cell.getValue())
+ } else if (val.mode === 'beurteilungDownload') {
+ //demo.dev.technikum-wien.at/cis/private/lehre/projektbeurteilungDocumentExport.php?betreuerart_kurzbz=Begutachter&projektarbeit_id=39239&person_id=22117
+ const pdfExportLink = FHC_JS_DATA_STORAGE_OBJECT.app_root + 'cis/private/pdfExport.php?xml=projektarbeitsbeurteilung.xml.php&xsl=Projektbeurteilung&betreuerart_kurzbz='+val.betreuerart_kurzbz+'&projektarbeit_id='+val.projektarbeit_id+'&person_id=' + val.betreuer_person_id
+ const pdfExportLink2 = FHC_JS_DATA_STORAGE_OBJECT.app_root + 'cis/private/lehre/projektbeurteilungDocumentExport.php?betreuerart_kurzbz='+val.betreuerart_kurzbz+'&projektarbeit_id='+val.projektarbeit_id+'&person_id=' + val.betreuer_person_id
+ window.open(pdfExportLink, '_blank')
+ }
+
+ }
+ console.log(cell.getData())
+ e.stopPropagation()
+
+ }
+ }
+ ]};
+ },
+ methods: {
+ setDetailComponent(details){
+ this.loadAbgaben(details).then((res)=> {
+ console.log(res)
+ const pa = this.data[0]?.retval?.find(projekarbeit => projekarbeit.projektarbeit_id == details.projektarbeit_id)
+ pa.abgabetermine = res.data.retval
+ pa.betreuer = this.buildBetreuer(pa)
+
+ this.selectedProjektarbeit = pa
+ })
+
+ },
+ centeredTextFormatter(cell) {
+ const val = cell.getValue()
+
+ return ''
+ },
+ detailFormatter(cell) {
+ const val = cell.getValue()
+
+ if(val.mode === 'detailTermine') {
+ return ''
+ } else if (val.mode === 'beurteilungDownload') {
+ return ''
+ }
+ },
+ mailFormatter(cell) {
+ const val = cell.getValue()
+ return ''
+ },
+ tableResolve(resolve) {
+ this.tableBuiltResolve = resolve
+ },
+ buildMailToLink(abgabe) {
+ return 'mailto:' + abgabe.mitarbeiter_uid +'@'+ this.domain
+ },
+ buildBetreuer(abgabe) {
+ return abgabe.betreuerart_beschreibung + ': ' + (abgabe.btitelpre ? abgabe.btitelpre + ' ' : '') + abgabe.bvorname + ' ' + abgabe.bnachname + (abgabe.btitelpost ?? '')
+ },
+ setupData(data){
+
+ this.data = data // TODO: better define what is needed from this for detail component
+ this.domain = data[1] // TODO do this in backend but this is a prototype anyway
+ const d = data[0]?.retval?.map(projekt => {
+ console.log('projekt', projekt)
+ let mode = 'detailTermine'
+
+ if (projekt.babgeschickt || projekt.zweitbetreuer_abgeschickt) {
+ mode = 'beurteilungDownload' // build dl link for both betreuer documents
+ }
+
+ return {
+ details: {
+ student_uid: this.viewData?.uid,
+ projektarbeit_id: projekt.projektarbeit_id,
+ betreuer_person_id: projekt.bperson_id,
+ betreuerart_kurzbz: projekt.betreuerart_kurzbz,
+ mode
+ },
+ sem: projekt.studiensemester_kurzbz,
+ stg: projekt.kurzbzlang,
+ mail: this.buildMailToLink(projekt),
+ betreuer: this.buildBetreuer(projekt),
+ typ: projekt.projekttypbezeichnung,
+ titel: projekt.titel
+ }
+ })
+
+ this.$refs.abgabeTable.tabulator.setColumns(this.abgabeTableOptions.columns)
+ this.$refs.abgabeTable.tabulator.setData(d);
+ },
+ loadProjektarbeiten() {
+ this.$fhcApi.factory.lehre.getStudentProjektarbeiten(this.viewData?.uid ?? null)
+ .then(res => {
+ if(res?.data) this.setupData(res.data)
+ })
+ },
+ loadAbgaben(details) {
+ return new Promise((resolve) => {
+ this.$fhcApi.factory.lehre.getStudentProjektabgaben(details)
+ .then(res => {
+ resolve(res)
+ })
+ })
+ },
+ handleUuidDefined(uuid) {
+ this.tabulatorUuid = uuid
+ },
+ async setupMounted() {
+ this.tableBuiltPromise = new Promise(this.tableResolve)
+ await this.tableBuiltPromise
+
+ this.loadProjektarbeiten()
+
+ }
+ },
+ watch: {
+
+ },
+ computed: {
+
+ },
+ created() {
+
+ },
+ mounted() {
+ this.setupMounted()
+ },
+ template: `
+ {{$p.t('abgabetool/abgabetoolTitle')}}
+
+
+
+
+
+
+ `,
+};
+
+export default Abgabetool;
diff --git a/public/js/components/Cis/Raumsuche/Raumsuche.js b/public/js/components/Cis/Raumsuche/Raumsuche.js
index a86c3825b..119fc56be 100644
--- a/public/js/components/Cis/Raumsuche/Raumsuche.js
+++ b/public/js/components/Cis/Raumsuche/Raumsuche.js
@@ -1,7 +1,7 @@
import {CoreFilterCmpt} from "../../../components/filter/Filter.js";
-export default {
+export const Raumsuche = {
name: "Raumsuche",
props: {
@@ -34,7 +34,7 @@ export default {
}),
raumsucheTableOptions: {
height: Vue.ref(400),
- index: 'prestudent_id',
+ index: 'ort_kurzbz',
layout: 'fitColumns',
placeholder: this.$p.t('global/noDataAvailable'),
columns: [
@@ -243,3 +243,5 @@ export default {
/>
`,
};
+
+export default Raumsuche;
diff --git a/public/js/components/Dashboard/Dashboard.js b/public/js/components/Dashboard/Dashboard.js
index 74a65ecaa..a0d3ddcf3 100644
--- a/public/js/components/Dashboard/Dashboard.js
+++ b/public/js/components/Dashboard/Dashboard.js
@@ -3,6 +3,7 @@ import DashboardWidgetPicker from "./Widget/Picker.js";
import ObjectUtils from "../../helpers/ObjectUtils.js";
export default {
+ name: 'Dashboard',
components: {
DashboardSection,
DashboardWidgetPicker
diff --git a/system/phrasesupdate.php b/system/phrasesupdate.php
index bfae232f4..d1bddc46b 100644
--- a/system/phrasesupdate.php
+++ b/system/phrasesupdate.php
@@ -37697,6 +37697,346 @@ array(
)
)
),
+ array(
+ 'app' => 'core',
+ 'category' => 'abgabetool',
+ 'phrase' => 'abgabetoolTitle',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => "Bachelor-/Masterarbeiten",
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => "Bachelor's/Master's theses",
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
+ array(
+ 'app' => 'core',
+ 'category' => 'abgabetool',
+ 'phrase' => 'c4details',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => "Details",
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => "details",
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
+ array(
+ 'app' => 'core',
+ 'category' => 'abgabetool',
+ 'phrase' => 'c4sem',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => "Semester",
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => "semester",
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
+ array(
+ 'app' => 'core',
+ 'category' => 'abgabetool',
+ 'phrase' => 'c4stg',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => "Studiengang",
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => "degree program",
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
+ array(
+ 'app' => 'core',
+ 'category' => 'abgabetool',
+ 'phrase' => 'c4kontakt',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => "Kontakt",
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => "contact",
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
+ array(
+ 'app' => 'core',
+ 'category' => 'abgabetool',
+ 'phrase' => 'c4betreuer',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => "Betreuer",
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => "Assessor",
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
+ array(
+ 'app' => 'core',
+ 'category' => 'abgabetool',
+ 'phrase' => 'c4projekttyp',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => "Projekttyp",
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => "project type",
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
+ array(
+ 'app' => 'core',
+ 'category' => 'abgabetool',
+ 'phrase' => 'c4titel',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => "Titel",
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => "title",
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
+ array(
+ 'app' => 'core',
+ 'category' => 'abgabetool',
+ 'phrase' => 'c4abgabeStudentenbereich',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => "Dokumentabgabe - Studentenbereich",
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => "File submission - Student area",
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
+ array(
+ 'app' => 'core',
+ 'category' => 'abgabetool',
+ 'phrase' => 'c4fixtermin',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => "Fixtermin",
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => "Fixed submission deadline",
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
+ array(
+ 'app' => 'core',
+ 'category' => 'abgabetool',
+ 'phrase' => 'c4zieldatum',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => "Zieldatum",
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => "target date",
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
+ array(
+ 'app' => 'core',
+ 'category' => 'abgabetool',
+ 'phrase' => 'c4abgabetyp',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => "Abgabetyp",
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => "Type of document submitted",
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
+ array(
+ 'app' => 'core',
+ 'category' => 'abgabetool',
+ 'phrase' => 'c4abgabekurzbz',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => "Kurzbeschreibung der Abgabe",
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => "Short description of the submitted file",
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
+ array(
+ 'app' => 'core',
+ 'category' => 'abgabetool',
+ 'phrase' => 'c4abgabedatum',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => "Abgabedatum",
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => "submission date",
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
+ array(
+ 'app' => 'core',
+ 'category' => 'abgabetool',
+ 'phrase' => 'c4fileupload',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => "Fileupload PDF max. 30 MB",
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => "Fileupload PDF max. 30 MB",
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
+ array(
+ 'app' => 'core',
+ 'category' => 'abgabetool',
+ 'phrase' => 'c4allowedFileTypes',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => "Upload-File ist kein PDF!",
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => "Upload-File is not a PDF!",
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
+ array(
+ 'app' => 'core',
+ 'category' => 'abgabetool',
+ 'phrase' => 'c4enduploadZusatzdaten',
+ 'insertvon' => 'system',
+ 'phrases' => array(
+ array(
+ 'sprache' => 'German',
+ 'text' => "Upload-File ist kein PDF!",
+ 'description' => '',
+ 'insertvon' => 'system'
+ ),
+ array(
+ 'sprache' => 'English',
+ 'text' => "Upload-File is not a PDF!",
+ 'description' => '',
+ 'insertvon' => 'system'
+ )
+ )
+ ),
// ### STUDIENGANG_INFORMATIONEN PHRASEN START
array(
'app' => 'core',