postStudentProjektarbeitZusatzdaten in detail view for Betreuer/Assistenz;

This commit is contained in:
Johann Hoffmann
2025-11-21 12:36:03 +01:00
parent c447fb9632
commit 3b7ed523b4
8 changed files with 323 additions and 72 deletions
@@ -41,9 +41,8 @@ class Abgabe extends FHCAPI_Controller
'getNoten' => self::PERM_LOGGED,
'getProjektarbeitenForStudiengang' =>array('basis/abgabe_assistenz:rw'),
'getStudiengaenge' => array('basis/abgabe_assistenz:rw'),
'getStudentProjektarbeitAbgabeFile' => array('basis/abgabe_student:rw', 'basis/abgabe_lektor:rw', 'basis/abgabe_assistenz:rw')
// 'notifyStudentMail' => self::PERM_LOGGED,
// 'notifyBetreuerMail' => self::PERM_LOGGED
'getStudentProjektarbeitAbgabeFile' => array('basis/abgabe_student:rw', 'basis/abgabe_lektor:rw', 'basis/abgabe_assistenz:rw'),
'postStudentProjektarbeitZusatzdaten' => array('basis/abgabe_lektor:rw', 'basis/abgabe_assistenz:rw')
]);
$this->load->library('PhrasesLib');
@@ -254,7 +253,7 @@ class Abgabe extends FHCAPI_Controller
|| !isset($paabgabetyp_kurzbz) || isEmptyString($paabgabetyp_kurzbz)
|| !isset($abstract) || !isset($abstract_en) // endupload zusatzdaten can be empty but should never be null
|| !isset($schlagwoerter) || !isset($schlagwoerter_en)
|| !isset($seitenanzahl))
|| !isset($seitenanzahl) || !isset($sprache))
$this->terminateWithError($this->p->t('global', 'wrongParameters'), 'general');
if ((isset($_FILES) and isset($_FILES['file']) and ! $_FILES['file']['error'])) {
@@ -985,6 +984,50 @@ class Abgabe extends FHCAPI_Controller
}
}
public function postStudentProjektarbeitZusatzdaten(){
$projektarbeit_id = $_POST['projektarbeit_id'];
$sprache = $_POST['sprache'];
$abstract = $_POST['abstract'];
$abstract_en = $_POST['abstract_en'];
$schlagwoerter = $_POST['schlagwoerter'];
$schlagwoerter_en = $_POST['schlagwoerter_en'];
$seitenanzahl = $_POST['seitenanzahl'];
if (!isset($projektarbeit_id) || isEmptyString($projektarbeit_id)
|| !isset($abstract) || !isset($abstract_en) // endupload zusatzdaten can be empty but should never be null
|| !isset($schlagwoerter) || !isset($schlagwoerter_en)
|| !isset($seitenanzahl) || !isset($sprache)) {
$this->terminateWithError($this->p->t('global', 'wrongParameters'), 'general');
}
$this->load->model('education/Projektarbeit_model', 'ProjektarbeitModel');
$result = $this->ProjektarbeitModel->load($projektarbeit_id);
$projektarbeitArr = $this->getDataOrTerminateWithError($result);
if(count($projektarbeitArr) > 0) {
$projektarbeit = $projektarbeitArr[0];
} else {
$this->terminateWithError($this->p->t('global','projektarbeitNichtGefunden'), 'general');
}
// update projektarbeit cols
$this->ProjektarbeitModel->updateProjektarbeit($projektarbeit_id,$sprache,$abstract,$abstract_en
,$schlagwoerter, $schlagwoerter_en, $seitenanzahl);
$this->logLib->logInfoDB(array('zusatzdatenEditMitarbeiter', array(
'updatevon' => getAuthUID(),
'updateamum' => date('Y-m-d H:i:s')
), getAuthUID(), getAuthPersonId(), array($projektarbeit_id,$sprache,$abstract,$abstract_en
,$schlagwoerter, $schlagwoerter_en, $seitenanzahl)));
$result = $this->ProjektarbeitModel->load($projektarbeit_id);
$this->terminateWithSuccess($result);
}
private function checkAbgabeSignatur($abgabe, $projektarbeit) {
if($abgabe->paabgabetyp_kurzbz != 'end') {
return;
+8
View File
@@ -108,5 +108,13 @@ export default {
method: 'get',
url: '/api/frontend/v1/Abgabe/getStudiengaenge'
};
},
postStudentProjektarbeitZusatzdaten(formData) {
return {
method: 'post',
url: '/api/frontend/v1/Abgabe/postStudentProjektarbeitZusatzdaten',
params: formData,
config: {Headers: { "Content-Type": "multipart/form-data" }}
};
}
};
@@ -64,7 +64,16 @@ export const AbgabeMitarbeiterDetail = {
icon: "fa fa-eye",
command: this.openStudentPage
}],
newTermin: null
newTermin: null,
form: Vue.reactive({
sprache: '',
abstract: '',
abstract_en: '',
schlagwoerter: '',
schlagwoerter_en: '',
kontrollschlagwoerter: '',
seitenanzahl: 1,
})
}
},
methods: {
@@ -89,6 +98,7 @@ export const AbgabeMitarbeiterDetail = {
...res.data[0]
}
if(newTerminRes.note) newTerminRes.note = noteOpt
newTerminRes.invertedFixtermin = !newTerminRes.fixtermin
const existingTerminRes = res.data[1]
const abgabeOpt = this.abgabeTypeOptions.find(opt => opt.paabgabetyp_kurzbz == newTerminRes.paabgabetyp_kurzbz)
@@ -148,6 +158,104 @@ export const AbgabeMitarbeiterDetail = {
}
})
},
openZusatzdatenModal() {
this.$refs.modalContainerZusatzdaten.show()
},
async saveZusatzdaten(){
if (!await this.validateZusatzdaten())
{
return false;
}
const pa = this.projektarbeit
// post endabgabe
const formData = new FormData();
formData.append('projektarbeit_id', this.projektarbeit.projektarbeit_id);
formData.append('sprache', this.form['sprache'].sprache)
formData.append('abstract', this.form['abstract'])
formData.append('abstract_en', this.form['abstract_en'])
formData.append('schlagwoerter', this.form['schlagwoerter'])
formData.append('schlagwoerter_en', this.form['schlagwoerter_en'])
formData.append('seitenanzahl', this.form['seitenanzahl'])
this.loading = true
this.$api.call(ApiAbgabe.postStudentProjektarbeitZusatzdaten(formData))
.then(res => {
if(res.meta.status == 'success') {
this.$fhcAlert.alertSuccess(this.$p.t('ui/gespeichert'))
if(!data?.retval?.[0]) return
const paRes = data.retval[0]
pa.seitenanzahl = paRes.seitenanzahl ?? 1
pa.kontrollschlagwoerter = paRes.kontrollschlagwoerter ?? ''
pa.schlagwoerter = paRes.schlagwoerter ?? ''
pa.sprache = paRes.sprache ?? ''
pa.schlagwoerter_en = paRes.schlagwoerter_en ?? ''
pa.abstract = paRes.abstract ?? ''
pa.abstract_en = paRes.abstract_en ?? ''
}
}).finally(()=> {
this.loading = false
})
this.$refs.modalContainerZusatzdaten.hide()
},
async validateZusatzdaten() {
// check these input fields for length of entry
if(this.form['abstract'].length < 100 && await this.$fhcAlert.confirm({
message: this.$p.t('abgabetool/warningShortAbstract'),
acceptLabel: this.$capitalize(this.$p.t('abgabetool/c4AcceptAndProceed')),
acceptClass: 'btn btn-danger',
rejectLabel: this.$capitalize(this.$p.t('abgabetool/c4Cancel')),
rejectClass: 'btn btn-outline-secondary'
}) === false) {
return false
}
if(this.form['abstract_en'].length < 100 && await this.$fhcAlert.confirm({
message: this.$capitalize(this.$p.t('abgabetool/warningShortAbstractEn')),
acceptLabel: this.$capitalize(this.$p.t('abgabetool/c4AcceptAndProceed')),
acceptClass: 'btn btn-danger',
rejectLabel: this.$capitalize(this.$p.t('abgabetool/c4Cancel')),
rejectClass: 'btn btn-outline-secondary'
}) === false) {
return false
}
if(this.form['schlagwoerter'].length < 50 && await this.$fhcAlert.confirm({
message: this.$capitalize(this.$p.t('abgabetool/warningShortSchlagwoerter')),
acceptLabel: this.$capitalize(this.$p.t('abgabetool/c4AcceptAndProceed')),
acceptClass: 'btn btn-danger',
rejectLabel: this.$capitalize(this.$p.t('abgabetool/c4Cancel')),
rejectClass: 'btn btn-outline-secondary'
}) === false) {
return false
}
if(this.form['schlagwoerter_en'].length < 50 && await this.$fhcAlert.confirm({
message: this.$capitalize(this.$p.t('abgabetool/warningShortSchlagwoerterEn')),
acceptLabel: this.$capitalize(this.$p.t('abgabetool/c4AcceptAndProceed')),
acceptClass: 'btn btn-danger',
rejectLabel: this.$capitalize(this.$p.t('abgabetool/c4Cancel')),
rejectClass: 'btn btn-outline-secondary'
}) === false) {
return false
}
if(this.form['seitenanzahl'] <= 5 && await this.$fhcAlert.confirm({
message: this.$capitalize(this.$p.t('abgabetool/warningSmallSeitenanzahl')),
acceptLabel: this.$capitalize(this.$p.t('abgabetool/c4AcceptAndProceed')),
acceptClass: 'btn btn-danger',
rejectLabel: this.$capitalize(this.$p.t('abgabetool/c4Cancel')),
rejectClass: 'btn btn-outline-secondary'
}) === false) {
return false
}
return true
},
async handleDeleteTermin(termin){
if(await this.$fhcAlert.confirm({
message: this.$p.t('abgabetool/c4confirm_delete'),
@@ -466,7 +574,17 @@ export const AbgabeMitarbeiterDetail = {
// set invertedFixtermin field for UI/UX purposes -> avoid double negation in text
newVal?.abgabetermine?.forEach(termin => termin.invertedFixtermin = !termin.fixtermin)
}
// 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 ?? 1
},
},
created() {
@@ -475,7 +593,7 @@ export const AbgabeMitarbeiterDetail = {
},
template: `
<bs-modal
<bs-modal
id="innerModalNewAbgabe"
ref="modalContainerCreateNewAbgabe"
class="bootstrap-prompt"
@@ -492,7 +610,7 @@ export const AbgabeMitarbeiterDetail = {
<div v-if="showAutomagicModalPhrase" class="text-center"><p>{{$p.t('abgabetool/c4abgabeQualGateNegativAddNewAutomagisch')}}</p></div>
<div v-if="newTermin">
<div v-if="assistenzMode" class="row">
<div class="col-4 col-md-3 fw-bold">{{$p.t('abgabetool/c4fixterminv4')}}</div>
<div class="col-4 col-md-3 fw-bold align-content-center">{{$p.t('abgabetool/c4fixterminv4')}}</div>
<div class="col-8 col-md-9">
<Checkbox
v-model="newTermin.invertedFixtermin"
@@ -503,7 +621,7 @@ export const AbgabeMitarbeiterDetail = {
</div>
</div>
<div class="row mt-2">
<div class="col-4 col-md-3 fw-bold">{{ $capitalize( $p.t('abgabetool/c4zieldatum') )}}</div>
<div class="col-4 col-md-3 fw-bold align-content-center">{{ $capitalize( $p.t('abgabetool/c4zieldatum') )}}</div>
<div class="col-8 col-md-9">
<VueDatePicker
v-model="newTermin.datum"
@@ -516,7 +634,7 @@ export const AbgabeMitarbeiterDetail = {
</div>
</div>
<div class="row mt-2">
<div class="col-4 col-md-3 fw-bold">{{ $capitalize( $p.t('abgabetool/c4abgabetypv2') )}}</div>
<div class="col-4 col-md-3 fw-bold align-content-center">{{ $capitalize( $p.t('abgabetool/c4abgabetyp') )}}</div>
<div class="col-8 col-md-9">
<Dropdown
:style="{'width': '100%'}"
@@ -528,7 +646,7 @@ export const AbgabeMitarbeiterDetail = {
</div>
</div>
<div class="row mt-2">
<div class="col-4 col-md-3 fw-bold">{{ $capitalize( $p.t('abgabetool/c4upload_allowed') )}}</div>
<div class="col-4 col-md-3 fw-bold align-content-center">{{ $capitalize( $p.t('abgabetool/c4upload_allowed') )}}</div>
<div class="col-8 col-md-9">
<Checkbox
v-model="newTermin.upload_allowed"
@@ -539,7 +657,7 @@ export const AbgabeMitarbeiterDetail = {
</div>
</div>
<div class="row mt-2">
<div class="col-4 col-md-3 fw-bold">{{ $capitalize( $p.t('abgabetool/c4abgabekurzbz') )}}</div>
<div class="col-4 col-md-3 fw-bold align-content-center">{{ $capitalize( $p.t('abgabetool/c4abgabekurzbz') )}}</div>
<div class="col-8 col-md-9">
<Textarea style="margin-bottom: 4px;" v-model="newTermin.kurzbz" rows="1" class="w-100"></Textarea>
</div>
@@ -552,18 +670,6 @@ export const AbgabeMitarbeiterDetail = {
</bs-modal>
<div v-if="projektarbeit">
<!-- <div id="speedDialWrapper" :style="getSpeedDialWrapperStyle">-->
<!-- <SpeedDial-->
<!-- :style="getSpeedDialStyle"-->
<!-- :model="speedDialItems" -->
<!-- direction="up"-->
<!-- :radius="80"-->
<!-- type="linear"-->
<!-- buttonClass="p-button-rounded p-button-lg p-button-primary"-->
<!-- :tooltipOptions="{ position: 'left' }"-->
<!-- />-->
<!-- </div>-->
<h5>{{$capitalize( $p.t('abgabetool/c4abgabeMitarbeiterbereich') )}}</h5>
<div class="row">
@@ -573,7 +679,6 @@ export const AbgabeMitarbeiterDetail = {
<p v-if="projektarbeit?.zweitbegutachter"> {{projektarbeit?.zweitbegutachter}}</p>
</div>
<div class="col-6 d-flex justify-content-end align-items-start">
<!-- <div id="speedDialWrapper" :style="getSpeedDialWrapperStyle">-->
<SpeedDial
:model="speedDialItems"
direction="left"
@@ -583,12 +688,9 @@ export const AbgabeMitarbeiterDetail = {
:tooltipOptions="{ position: 'down' }"
>
<template #icon>
<i class="fa-solid fa-bars"></i>
</template>
</SpeedDial>
<!-- </div>-->
</div>
</div>
<div class="row" style="margin-bottom: 12px;">
@@ -597,6 +699,13 @@ export const AbgabeMitarbeiterDetail = {
<i class="fa-solid fa-plus"></i>
{{$capitalize( $p.t('abgabetool/c4newAbgabetermin') )}}
</button>
</div>
<div class="col-auto">
<button type="button" class="btn btn-primary ml-4" @click="openZusatzdatenModal">
<i class="fa-solid fa-pen-to-square"></i>
{{$capitalize( $p.t('abgabetool/c4ZusatzdatenBearbeiten') )}}
</button>
</div>
</div>
<Accordion :multiple="true" :activeIndex="getActiveIndexTabArray">
@@ -626,7 +735,7 @@ export const AbgabeMitarbeiterDetail = {
</div>
</template>
<div class="row mt-2" v-if="assistenzMode">
<div class="col-12 col-md-3 fw-bold">{{$capitalize( $p.t('abgabetool/c4fixterminv4') )}}</div>
<div class="col-12 col-md-3 fw-bold align-content-center">{{$capitalize( $p.t('abgabetool/c4fixterminv4') )}}</div>
<div class="col-12 col-md-9">
<Checkbox
v-model="termin.invertedFixtermin"
@@ -637,7 +746,7 @@ export const AbgabeMitarbeiterDetail = {
</div>
</div>
<div class="row mt-2">
<div class="col-12 col-md-3 fw-bold">{{$capitalize( $p.t('abgabetool/c4zieldatum') )}}</div>
<div class="col-12 col-md-3 fw-bold align-content-center">{{$capitalize( $p.t('abgabetool/c4zieldatum') )}}</div>
<div class="col-12 col-md-9">
<VueDatePicker
v-model="termin.datum"
@@ -651,7 +760,7 @@ export const AbgabeMitarbeiterDetail = {
</div>
</div>
<div class="row mt-2">
<div class="col-12 col-md-3 fw-bold">{{$capitalize( $p.t('abgabetool/c4abgabetyp') )}}</div>
<div class="col-12 col-md-3 fw-bold align-content-center">{{$capitalize( $p.t('abgabetool/c4abgabetyp') )}}</div>
<div class="col-12 col-md-9">
<Dropdown
:style="{'width': '100%'}"
@@ -666,7 +775,7 @@ export const AbgabeMitarbeiterDetail = {
</div>
</div>
<div class="row mt-2" v-if="termin.bezeichnung?.paabgabetyp_kurzbz === 'qualgate1' || termin.bezeichnung?.paabgabetyp_kurzbz === 'qualgate2'">
<div class="col-12 col-md-3 fw-bold">{{$capitalize( $p.t('abgabetool/c4upload_allowed') )}}</div>
<div class="col-12 col-md-3 fw-bold align-content-center">{{$capitalize( $p.t('abgabetool/c4upload_allowed') )}}</div>
<div class="col-12 col-md-9">
<Checkbox
v-model="termin.upload_allowed"
@@ -677,7 +786,7 @@ export const AbgabeMitarbeiterDetail = {
</div>
</div>
<div class="row mt-2" v-if="termin.bezeichnung?.benotbar">
<div class="col-12 col-md-3 fw-bold">{{$capitalize( $p.t('abgabetool/c4note') )}}</div>
<div class="col-12 col-md-3 fw-bold align-content-center">{{$capitalize( $p.t('abgabetool/c4note') )}}</div>
<div class="col-12 col-md-9">
<Dropdown
:style="{'width': '100%'}"
@@ -688,20 +797,20 @@ export const AbgabeMitarbeiterDetail = {
</div>
</div>
<div class="row mt-2" v-if="termin.bezeichnung?.benotbar">
<div class="col-12 col-md-3 fw-bold">{{$capitalize( $p.t('abgabetool/c4notizQualGatev2') )}}</div>
<div class="col-12 col-md-3 fw-bold align-content-center">{{$capitalize( $p.t('abgabetool/c4notizQualGatev2') )}}</div>
<div class="col-12 col-md-9">
<Textarea style="margin-bottom: 4px;" v-model="termin.beurteilungsnotiz" rows="1" class="w-100" :disabled="!termin.allowedToSave"></Textarea>
</div>
</div>
<div class="row mt-2">
<div class="col-12 col-md-3 fw-bold">{{$capitalize( $p.t('abgabetool/c4abgabekurzbz') )}}</div>
<div class="col-12 col-md-3 fw-bold align-content-center">{{$capitalize( $p.t('abgabetool/c4abgabekurzbz') )}}</div>
<div class="col-12 col-md-9">
<Textarea style="margin-bottom: 4px;" v-model="termin.kurzbz" class="w-100" rows="1" :disabled="!termin.allowedToSave"></Textarea>
</div>
</div>
<div class="row mt-2">
<div class="col-12 col-md-3 fw-bold">{{$capitalize( $p.t('abgabetool/c4abgabedatum') )}}</div>
<div class="col-12 col-md-3 fw-bold align-content-center">{{$capitalize( $p.t('abgabetool/c4abgabedatum') )}}</div>
<div class="col-12 col-md-9">
<template v-if="termin?.abgabedatum">
<div class="row">
@@ -737,7 +846,7 @@ export const AbgabeMitarbeiterDetail = {
</div>
</div>
<div class="row mt-2">
<div class="col-12 col-md-3 fw-bold">
<div class="col-12 col-md-3 fw-bold align-content-center">
{{ $capitalize( $p.t('abgabetool/c4actions') )}}
</div>
<div class="col-12 col-md-9">
@@ -777,6 +886,92 @@ export const AbgabeMitarbeiterDetail = {
<h5>{{ $capitalize( $p.t('abgabetool/c4keineAbgabetermineGefunden') )}}</h5>
</div>
<bs-modal
ref="modalContainerZusatzdaten"
class="bootstrap-prompt"
dialogClass="bordered-modal modal-lg">
<template v-slot:title>
<div>
{{$capitalize( $p.t('abgabetool/c4enduploadZusatzdaten') )}}
</div>
<div class="row mb-3 align-items-start">
<p class="ml-4 mr-4">Student UID: {{ projektarbeit?.student_uid}}</p>
</div>
<div class="row mb-3 align-items-start">
<p class="ml-4 mr-4">{{$capitalize( $p.t('abgabetool/c4titel') )}}: {{ projektarbeit?.titel }}</p>
</div>
</template>
<template v-slot:default>
<div class="row mb-3 align-items-start">
<div class="row">{{$capitalize( $p.t('abgabetool/c4Sprache') )}}</div>
<div class="row">
<Dropdown
:style="{'width': '100%'}"
v-model="form.sprache"
:options="allActiveLanguages"
:optionLabel="getOptionLabelSprache">
</Dropdown>
</div>
</div>
<!-- lektor fills these out-->
<!-- <div class="row mb-3 align-items-start">-->
<!-- <div class="row">Kontrollierte Schlagwörter</div>-->
<!-- <div class="row">-->
<!-- <Textarea v-model="form.kontrollschlagwoerter"></Textarea>-->
<!-- </div>-->
<!-- -->
<!-- -->
<!-- </div>-->
<div class="row mb-3 align-items-start">
<div class="row">{{$capitalize( $p.t('abgabetool/c4schlagwoerterGer') )}}</div>
<div class="row">
<Textarea v-model="form.schlagwoerter" class="w-100"></Textarea>
</div>
</div>
<div class="row mb-3 align-items-start">
<div class="row">{{$capitalize( $p.t('abgabetool/c4schlagwoerterEng') )}}</div>
<div class="row">
<Textarea v-model="form.schlagwoerter_en" class="w-100"></Textarea>
</div>
</div>
<div class="row mb-3 align-items-start">
<div class="row">{{$capitalize( $p.t('abgabetool/c4abstractGer') )}}</div>
<div class="row">
<Textarea v-model="form.abstract" rows="10" maxlength="5000" class="w-100"></Textarea>
<p>{{ form.abstract?.length ? form.abstract.length : 0 }} / 5000 characters</p>
</div>
</div>
<div class="row mb-3 align-items-start">
<div class="row">{{$capitalize( $p.t('abgabetool/c4abstractEng') )}}</div>
<div class="row">
<Textarea v-model="form.abstract_en" rows="10" maxlength="5000" class="w-100"></Textarea>
<p>{{ form.abstract_en?.length ? form.abstract_en.length : 0 }} / 5000 characters</p>
</div>
</div>
<div class="row mb-3 align-items-start">
<div class="row">{{$capitalize( $p.t('abgabetool/c4seitenanzahl') )}}</div>
<div class="row">
<InputNumber
v-model="form.seitenanzahl"
inputId="seitenanzahlInput" :min="1" :max="100000">
</InputNumber>
</div>
</div>
</template>
<template v-slot:footer>
<button class="btn btn-primary" @click="saveZusatzdaten">{{ $capitalize( $p.t('abgabetool/c4save') )}}</button>
</template>
</bs-modal>
</div>
`,
};
@@ -412,15 +412,15 @@ export const AbgabeStudentDetail = {
<template #content>
<div class="col-auto">
<div class="row">
<div class="col-12 col-md-3 fw-bold">{{ $capitalize($p.t('abgabetool/c4abgabeZeitstatus')) }}</div>
<div class="col-12 col-md-3 fw-bold align-content-center">{{ $capitalize($p.t('abgabetool/c4abgabeZeitstatus')) }}</div>
<div class="col-12 col-md-9">{{$p.t('abgabetool/c4tooltip' + $capitalize(termin?.dateStyle) )}}</div>
</div>
<div class="row">
<div class="col-12 col-md-3 fw-bold">{{ $capitalize($p.t('abgabetool/c4fixterminv4')) }}</div>
<div class="col-12 col-md-3 fw-bold align-content-center">{{ $capitalize($p.t('abgabetool/c4fixterminv4')) }}</div>
<div class="col-12 col-md-9">{{!termin?.fixtermin}}</div>
</div>
<div class="row">
<div class="col-12 col-md-3 fw-bold">{{ $capitalize($p.t('abgabetool/c4fileUploaded')) }}</div>
<div class="col-12 col-md-3 fw-bold align-content-center">{{ $capitalize($p.t('abgabetool/c4fileUploaded')) }}</div>
<div class="col-12 col-md-9">{{termin?.abgabedatum !== null}}</div>
</div>
</div>
@@ -431,7 +431,7 @@ export const AbgabeStudentDetail = {
</div>
<div class="row mt-2">
<div class="col-12 col-md-3 fw-bold">{{$capitalize( $p.t('abgabetool/c4zieldatum') )}}</div>
<div class="col-12 col-md-3 fw-bold align-content-center">{{$capitalize( $p.t('abgabetool/c4zieldatum') )}}</div>
<div class="col-12 col-md-9">
<VueDatePicker
v-model="termin.datum"
@@ -446,14 +446,14 @@ export const AbgabeStudentDetail = {
</div>
<div class="row mt-2">
<div class="col-12 col-md-3 fw-bold">{{$capitalize( $p.t('abgabetool/c4abgabetypv2') )}}</div>
<div class="col-12 col-md-3 fw-bold align-content-center">{{$capitalize( $p.t('abgabetool/c4abgabetyp') )}}</div>
<div class="col-12 col-md-9">
{{ termin.bezeichnung }}
</div>
</div>
<div class="row mt-2" v-if="termin.note">
<div class="col-12 col-md-3 fw-bold">{{$capitalize( $p.t('abgabetool/c4note') )}}</div>
<div class="col-12 col-md-3 fw-bold align-content-center">{{$capitalize( $p.t('abgabetool/c4note') )}}</div>
<div class="col-12 col-md-9">
<div class="col-1 d-flex justify-content-start align-items-start">
{{ getTerminNoteBezeichnung(termin) }}
@@ -462,21 +462,21 @@ export const AbgabeStudentDetail = {
</div>
<div class="row mt-2" v-if="termin.paabgabetyp_kurzbz === 'qualgate1' || termin.paabgabetyp_kurzbz === 'qualgate2'">
<div class="col-12 col-md-3 fw-bold">{{$capitalize( $p.t('abgabetool/c4notizQualGatev2') )}}</div>
<div class="col-12 col-md-3 fw-bold align-content-center">{{$capitalize( $p.t('abgabetool/c4notizQualGatev2') )}}</div>
<div class="col-12 col-md-9">
<Textarea style="margin-bottom: 4px;" v-model="termin.beurteilungsnotiz" rows="1" class="w-100" disabled></Textarea>
</div>
</div>
<div v-if="termin.kurzbz && termin.kurzbz.length > 0" class="row mt-2">
<div class="col-12 col-md-3 fw-bold">{{$capitalize( $p.t('abgabetool/c4abgabekurzbz') )}}</div>
<div class="col-12 col-md-3 fw-bold align-content-center">{{$capitalize( $p.t('abgabetool/c4abgabekurzbz') )}}</div>
<div class="col-12 col-md-9">
<Textarea style="margin-bottom: 4px;" v-model="termin.kurzbz" rows="1" class="w-100" :disabled="true"></Textarea>
</div>
</div>
<div class="row mt-2">
<div class="col-12 col-md-3 fw-bold">{{$capitalize( $p.t('abgabetool/c4abgabedatum') )}}</div>
<div class="col-12 col-md-3 fw-bold align-content-center">{{$capitalize( $p.t('abgabetool/c4abgabedatum') )}}</div>
<div class="col-12 col-md-9">
<template v-if="termin?.abgabedatum">
<div class="row">
@@ -508,7 +508,7 @@ export const AbgabeStudentDetail = {
</div>
<div class="row mt-2" v-if="termin.upload_allowed">
<div class="col-12 col-md-3 fw-bold">{{$capitalize( $p.t('abgabetool/c4fileupload') )}}</div>
<div class="col-12 col-md-3 fw-bold align-content-center">{{$capitalize( $p.t('abgabetool/c4fileupload') )}}</div>
<div class="col-12 col-md-9">
<div class="row" v-if="termin?.allowedToUpload">
<div class="col-12 col-sm-6 mb-2">
@@ -665,7 +665,7 @@ export const AbgabetoolAssistenz = {
const mappedData = this.mapProjekteToTableData(this.projektarbeiten)
this.$refs.abgabeTable.tabulator.clearData()
// this.$refs.abgabeTable.tabulator.clearData()
this.$refs.abgabeTable.tabulator.setColumns(this.abgabeTableOptions.columns)
this.$refs.abgabeTable.tabulator.setData(mappedData);
},
@@ -832,7 +832,7 @@ export const AbgabetoolAssistenz = {
{{$capitalize($p.t('abgabetool/c4zieldatum'))}}
</div>
<div class="col-3 d-flex justify-content-center align-items-center">
{{$p.t('abgabetool/c4abgabetypv2')}}
{{$p.t('abgabetool/c4abgabetyp')}}
</div>
<div class="col-5 d-flex justify-content-center align-items-center">
{{$p.t('abgabetool/c4abgabekurzbz')}}
@@ -87,7 +87,7 @@ export const AbgabetoolMitarbeiter = {
},
{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4details'))), field: 'details', formatter: this.detailFormatter, widthGrow: 1, tooltip: false},
{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4personenkennzeichen'))), headerFilter: true, field: 'pkz', formatter: this.pkzTextFormatter, widthGrow: 1, tooltip: false},
{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4kontakt'))), field: 'mail', formatter: this.mailFormatter, widthGrow: 1, tooltip: false},
{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4kontakt'))), field: 'mail', formatter: this.mailFormatter, widthGrow: 1, tooltip: false, visible: false},
{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4vorname'))), field: 'vorname', headerFilter: true, formatter: this.centeredTextFormatter,widthGrow: 1},
{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4nachname'))), field: 'nachname', headerFilter: true, formatter: this.centeredTextFormatter, widthGrow: 1},
{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4projekttyp'))), field: 'projekttyp_kurzbz', formatter: this.centeredTextFormatter, widthGrow: 1},
@@ -215,27 +215,12 @@ export const AbgabetoolMitarbeiter = {
pa.abgabetermine = res.data[0].retval
pa.isCurrent = res.data[1]
// pa.abgabetermine.push({ // new abgatermin row
//
// 'paabgabe_id': -1,
// 'projektarbeit_id': pa.projektarbeit_id,
// 'fixtermin': false,
// 'kurzbz': '',
// 'datum': new Date().toISOString().split('T')[0],
// 'note': this.allowedNotenOptions.find(opt => opt.note == 9),
// 'upload_allowed': false,
// 'paabgabetyp_kurzbz': '',
// 'bezeichnung': '',
// 'abgabedatum': null,
// 'insertvon': this.viewData?.uid ?? ''
//
// })
pa.abgabetermine.forEach(termin => {
termin.note = this.allowedNotenOptions.find(opt => opt.note == termin.note)
termin.file = []
// lektoren are only allowed to edit their own deadline entries
// TODO: cis old
termin.allowedToSave = termin.insertvon == this.viewData?.uid && pa.betreuerart_kurzbz != 'Zweitbegutachter'
// lektoren are not allowed to delete deadlines with existing submissions
@@ -417,7 +402,7 @@ export const AbgabetoolMitarbeiter = {
{{$p.t('abgabetool/c4zieldatum')}}
</div>
<div class="col-3 d-flex justify-content-center align-items-center">
{{$p.t('abgabetool/c4abgabetypv2')}}
{{$p.t('abgabetool/c4abgabetyp')}}
</div>
<div class="col-6 d-flex justify-content-center align-items-center">
{{$p.t('abgabetool/c4abgabekurzbz')}}
@@ -36,7 +36,7 @@ export const DeadlineOverview = {
columns: [
{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4zieldatum'))), field: 'datum', formatter: this.centeredTextFormatter, widthGrow: 1, tooltip: false},
{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4fixterminv4'))), field: 'fixterminstring', formatter: this.centeredTextFormatter, widthGrow: 1, tooltip: false},
{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4abgabetypv2'))), field: 'typ_bezeichnung', formatter: this.centeredTextFormatter, widthGrow: 1},
{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4abgabetyp'))), field: 'typ_bezeichnung', formatter: this.centeredTextFormatter, widthGrow: 1},
{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4abgabekurzbz'))), field: 'kurzbz', formatter: this.centeredTextFormatter, widthGrow: 3},
{title: Vue.computed(() => this.$capitalize(this.$p.t('person/studentIn'))), field: 'student', formatter: this.centeredTextFormatter, widthGrow: 2},
{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4stg'))), field: 'stg', formatter: this.centeredTextFormatter,widthGrow: 1},
+24 -4
View File
@@ -42845,13 +42845,13 @@ array(
'phrases' => array(
array(
'sprache' => 'German',
'text' => "Alle anzeigen",
'text' => "Alle betreuten Projektarbeiten anzeigen",
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Show All',
'text' => 'Show all supervised project work',
'description' => '',
'insertvon' => 'system'
)
@@ -42865,13 +42865,13 @@ array(
'phrases' => array(
array(
'sprache' => 'German',
'text' => "Deadlines anzeigen",
'text' => "Deadline Übersicht anzeigen ",
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Show Deadlines',
'text' => 'Show Deadline Overview',
'description' => '',
'insertvon' => 'system'
)
@@ -43329,6 +43329,26 @@ array(
)
)
),
array(
'app' => 'core',
'category' => 'abgabetool',
'phrase' => 'c4ZusatzdatenBearbeiten',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => "Zusatzdaten bearbeiten",
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Edit additional Data',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'abgabetool',