diff --git a/application/controllers/api/frontend/v1/Lehre.php b/application/controllers/api/frontend/v1/Lehre.php index d0b712e36..375551e7a 100644 --- a/application/controllers/api/frontend/v1/Lehre.php +++ b/application/controllers/api/frontend/v1/Lehre.php @@ -130,13 +130,26 @@ class Lehre extends FHCAPI_Controller public function getStudentProjektabgaben() { $projektarbeit_id = $this->input->get("projektarbeit_id",TRUE); + // TODO: error messages + if (!isset($projektarbeit_id) || isEmptyString($projektarbeit_id)) $this->terminateWithError($this->p->t('global', 'wrongParameters'), 'general'); + + $projektarbeit_obj = new projektarbeit(); + if($projektarbeit_id==-1) + $this->terminateWithError($this->p->t('global', 'wrongParameters'), 'general'); + + if(!$projektarbeit_obj->load($projektarbeit_id)) + $this->terminateWithError($this->p->t('global', 'wrongParameters'), 'general'); + + $paIsCurrent = $projektarbeit_obj->projektarbeitIsCurrent($projektarbeit_id); $this->load->model('education/Projektarbeit_model', 'ProjektarbeitModel'); $ret = $this->ProjektarbeitModel->getProjektarbeitAbgabetermine($projektarbeit_id); - $this->terminateWithSuccess($ret); + // TODO: fetch zweitbetreuer + + $this->terminateWithSuccess(array($ret, $paIsCurrent)); } /** diff --git a/application/controllers/api/frontend/v1/Ort.php b/application/controllers/api/frontend/v1/Ort.php index a6a3b3404..0d8074fa9 100644 --- a/application/controllers/api/frontend/v1/Ort.php +++ b/application/controllers/api/frontend/v1/Ort.php @@ -100,8 +100,8 @@ class Ort extends FHCAPI_Controller ) "; $params = array_merge($params, [$datum, $vonStunde, $bisStunde, $datum, $vonStunde, $bisStunde]); - $this->addMeta('qry', $qry); - $this->addMeta('params', $params); +// $this->addMeta('qry', $qry); +// $this->addMeta('params', $params); $result = $this->OrtModel->execReadOnlyQuery($qry, $params); $this->terminateWithSuccess($result); diff --git a/public/js/components/Cis/Abgabetool/AbgabeMitarbeiterDetail.js b/public/js/components/Cis/Abgabetool/AbgabeMitarbeiterDetail.js index 3451d97ba..7e0da66f6 100644 --- a/public/js/components/Cis/Abgabetool/AbgabeMitarbeiterDetail.js +++ b/public/js/components/Cis/Abgabetool/AbgabeMitarbeiterDetail.js @@ -93,7 +93,6 @@ export const AbgabeMitarbeiterDetail = { }) }, deleteTermin(termin) { - debugger this.$fhcApi.factory.lehre.deleteProjektarbeitAbgabe(termin.paabgabe_id).then( (res) => { if(res?.meta?.status == 'success') { this.$fhcAlert.alertSuccess(this.$p.t('ui/genericDeleted', [this.$p.t('abgabetool/abgabe')])) @@ -144,7 +143,7 @@ export const AbgabeMitarbeiterDetail = { color = 'green' } - return 'font-color: ' + fontColor + '; background-color: ' + color + return `font-color: ${fontColor} ; background-color: ${color}; border-radius: 50%;` }, openBeurteilungLink(link) { window.open(link, '_blank') @@ -167,7 +166,14 @@ export const AbgabeMitarbeiterDetail = { return `${day}.${month}.${year}`; }, openStudentPage() { - // TODO: do it + const link = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + + '/Cis/Abgabetool/Student/' + this.projektarbeit?.student_uid + window.open(link, '_blank') + }, + openPlagiatcheck() { + // todo: hardcoded turnitin link pfui? + const link = "https://technikum-wien.turnitin.com/sso/sp/redwood/saml/5IyfmBr2OcSIaWQTKlFCGj/start" + window.open(link, '_blank') } }, watch: { @@ -188,7 +194,14 @@ export const AbgabeMitarbeiterDetail = { }, getEnduploadErlaubt() { return !this.eidAkzeptiert + }, + getSemesterBenotbar(){ + return this.projektarbeit?.isCurrent ?? false + }, + endUploadVorhanden(){ + return this.projektarbeit?.abgabetermine.find(abgabe => abgabe.paabgabetyp_kurzbz === 'end' && abgabe.abgabedatum !== null) } + }, created() { @@ -206,10 +219,20 @@ export const AbgabeMitarbeiterDetail = {

{{projektarbeit?.titel}}

{{projektarbeit?.zweitbegutachter}}

-
- +
+ + @@ -232,6 +255,7 @@ export const AbgabeMitarbeiterDetail = {
String(num).padStart(2, '0'); + + const month = padZero(date.getMonth() + 1); // Months are zero-based + const day = padZero(date.getDate()); + const year = date.getFullYear(); + + return `${day}.${month}.${year}`; + }, upload(termin) { if (!this.validate(termin)) @@ -147,7 +159,7 @@ export const AbgabeStudentDetail = { color = 'green' } - return 'font-color: ' + fontColor + '; background-color: ' + color + return `font-color: ${fontColor} ; background-color: ${color}; border-radius: 50%;` }, openBeurteilungLink(link) { window.open(link, '_blank') @@ -193,9 +205,9 @@ export const AbgabeStudentDetail = {
{{$p.t('abgabetool/c4fixtermin')}}
-
{{$p.t('abgabetool/c4zieldatum')}}
-
{{$p.t('abgabetool/c4abgabetyp')}}
-
{{$p.t('abgabetool/c4abgabekurzbz')}}
+
{{$p.t('abgabetool/c4zieldatum')}}
+
{{$p.t('abgabetool/c4abgabetyp')}}
+
{{$p.t('abgabetool/c4abgabekurzbz')}}
{{$p.t('abgabetool/c4abgabedatum')}}
{{$p.t('abgabetool/c4fileupload')}} @@ -205,33 +217,42 @@ export const AbgabeStudentDetail = {

-
+
- {{ termin.datum?.split("-").reverse().join(".") }} + +
-
{{ termin.bezeichnung }}
-
{{ termin.kurzbz }}
+
{{ termin.bezeichnung }}
+
+ +
{{ termin.abgabedatum?.split("-").reverse().join(".") }}
-
+
- +
-
- -
diff --git a/public/js/components/Cis/Abgabetool/AbgabetoolMitarbeiter.js b/public/js/components/Cis/Abgabetool/AbgabetoolMitarbeiter.js index 98d36be19..06a1f2d00 100644 --- a/public/js/components/Cis/Abgabetool/AbgabetoolMitarbeiter.js +++ b/public/js/components/Cis/Abgabetool/AbgabetoolMitarbeiter.js @@ -72,7 +72,6 @@ export const AbgabetoolMitarbeiter = { { event: "cellClick", handler: async (e, cell) => { - debugger if(cell.getColumn().getField() === "details") { this.setDetailComponent(cell.getValue()) } @@ -84,7 +83,6 @@ export const AbgabetoolMitarbeiter = { event: "rowClick", handler: async (e, row) => { - debugger e.stopPropagation() } @@ -93,7 +91,6 @@ export const AbgabetoolMitarbeiter = { event: "rowSelected", handler: async (row) => { - debugger } }, @@ -123,7 +120,8 @@ export const AbgabetoolMitarbeiter = { setDetailComponent(details){ this.loadAbgaben(details).then((res)=> { const pa = this.projektarbeiten?.retval?.find(projekarbeit => projekarbeit.projektarbeit_id == details.projektarbeit_id) - pa.abgabetermine = res.data.retval + pa.abgabetermine = res.data[0].retval + pa.isCurrent = res.data[1] pa.abgabetermine.push({ // new abgatermin row 'paabgabe_id': -1, @@ -153,9 +151,9 @@ export const AbgabetoolMitarbeiter = { this.selectedProjektarbeit = pa - Vue.nextTick(()=>{ - this.$refs.verticalsplit.showBoth() - }) + + this.$refs.verticalsplit.showBoth() + }) }, diff --git a/public/js/components/Cis/Abgabetool/AbgabetoolStudent.js b/public/js/components/Cis/Abgabetool/AbgabetoolStudent.js index 086cc8a9d..1ac9ad912 100644 --- a/public/js/components/Cis/Abgabetool/AbgabetoolStudent.js +++ b/public/js/components/Cis/Abgabetool/AbgabetoolStudent.js @@ -1,11 +1,13 @@ import {CoreFilterCmpt} from "../../../components/filter/Filter.js"; import AbgabeDetail from "./AbgabeStudentDetail.js"; +import VerticalSplit from "../../verticalsplit/verticalsplit.js"; export const AbgabetoolStudent = { name: "AbgabetoolStudent", components: { CoreFilterCmpt, - AbgabeDetail + AbgabeDetail, + VerticalSplit }, props: { student_uid_prop: { @@ -22,6 +24,7 @@ export const AbgabetoolStudent = { }, data() { return { + tabulatorUuid: Vue.ref(0), domain: '', student_uid: null, detail: null, @@ -30,7 +33,7 @@ export const AbgabetoolStudent = { tableBuiltResolve: null, tableBuiltPromise: null, abgabeTableOptions: { - height: 300, + height: 700, index: 'projektarbeit_id', layout: 'fitColumns', placeholder: this.$p.t('global/noDataAvailable'), @@ -85,7 +88,7 @@ export const AbgabetoolStudent = { setDetailComponent(details){ this.loadAbgaben(details).then((res)=> { const pa = this.projektarbeiten?.retval?.find(projekarbeit => projekarbeit.projektarbeit_id == details.projektarbeit_id) - pa.abgabetermine = res.data.retval + pa.abgabetermine = res.data[0].retval pa.abgabetermine.forEach(termin => { termin.file = [] termin.allowedToUpload = true @@ -103,6 +106,10 @@ export const AbgabetoolStudent = { pa.student_uid = this.student_uid this.selectedProjektarbeit = pa + + + this.$refs.verticalsplit.showBoth() + }) }, @@ -195,12 +202,23 @@ export const AbgabetoolStudent = { 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: { @@ -218,22 +236,28 @@ export const AbgabetoolStudent = { this.setupMounted() }, template: ` -

{{$p.t('abgabetool/abgabetoolTitle')}}

-
- - - -
-
- -
+ + + + `, }; diff --git a/public/js/components/Cis/Raumsuche/Raumsuche.js b/public/js/components/Cis/Raumsuche/Raumsuche.js index 119fc56be..a279fb1c0 100644 --- a/public/js/components/Cis/Raumsuche/Raumsuche.js +++ b/public/js/components/Cis/Raumsuche/Raumsuche.js @@ -1,4 +1,3 @@ - import {CoreFilterCmpt} from "../../../components/filter/Filter.js"; export const Raumsuche = { diff --git a/public/js/components/Form/Upload/Dms.js b/public/js/components/Form/Upload/Dms.js index a8548fe53..4c7a8eb3f 100644 --- a/public/js/components/Form/Upload/Dms.js +++ b/public/js/components/Form/Upload/Dms.js @@ -20,6 +20,10 @@ export default { accept: { type: String, default: '' + }, + disabled: { + type: Boolean, + default: false } }, methods: { @@ -88,7 +92,7 @@ export default { }, template: `
- +
    'core', + 'category' => 'abgabetool', + 'phrase' => 'c4abgabeMitarbeiterbereich', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => "Dokumentabgabe - Mitarbeiterbereich", + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => "File submission - Employee area", + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'abgabetool', + 'phrase' => 'abgabe', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => "Abgabe", + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => 'Submission', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), + array( + 'app' => 'core', + 'category' => 'ui', + 'phrase' => 'genericDeleted', + 'insertvon' => 'system', + 'phrases' => array( + array( + 'sprache' => 'German', + 'text' => '{0} gelöscht', + 'description' => '', + 'insertvon' => 'system' + ), + array( + 'sprache' => 'English', + 'text' => '{0} deleted', + 'description' => '', + 'insertvon' => 'system' + ) + ) + ), array( 'app' => 'core', 'category' => 'lehre',