Compare commits

...
5 changed files with 57 additions and 12 deletions
+7
View File
@@ -127,6 +127,13 @@ $config['tabs']['projektarbeit']['defaultProjektbetreuerStundenDiplom'] =
? FAS_STUDIERENDE_PROJEKTARBEIT_DEFAULT_BETREUER_STUNDEN_MASTER
: '0.0';
$config['tabs']['projektarbeit']['defaultProjektbetreuerStundensatz'] = '80.0';
// default Stunden per Betreuerart, they win over the Projekttyp defaults above
$config['tabs']['projektarbeit']['defaultProjektbetreuerStundenBetreuerart'] = [
'Betreuer' => '3.0',
'Begutachter' => '4.0',
'Erstbegutachter' => '5.0',
'Zweitbegutachter' => '3.0'
];
$config['student_tab_order'] = [
'details',
+14
View File
@@ -288,4 +288,18 @@ html.fs_huge {
.fhc-xxl-modal {
min-width: 80vw;
}
/* Projektarbeit modal: Vertragsdetails go below the Betreuer form if the column is too narrow for them */
.stv-details-projektbetreuer {
container-type: inline-size;
}
@container (max-width: 640px) {
.stv-details-projektbetreuer > .col-9,
.stv-details-projektbetreuer > .col-3 {
width: 100%;
}
.stv-details-projektbetreuer > .col-3 {
margin-top: 1rem;
}
}
@@ -291,7 +291,7 @@ export default {
<div class="row mb-3">
<div class="col-9">
<div class="col">
<form-input
container-class="stv-details-projektarbeit-firma"
:label="$p.t('projektarbeit', 'firma')"
@@ -305,7 +305,7 @@ export default {
>
</form-input>
</div>
<div class="col-3 align-content-center">
<div class="col-auto align-content-center">
<a :href="firmenverwaltungLink" target="_blank">
{{ $p.t('projektarbeit', 'zurFirmenverwaltung') }}
</a>
@@ -314,7 +314,7 @@ export default {
<div class="row mb-3">
<form-input
container-class="stv-details-projektarbeit-lv col-9"
container-class="stv-details-projektarbeit-lv col"
:label="$p.t('projektarbeit', 'lehrveranstaltung')"
type="select"
v-model="formData.lehrveranstaltung_id"
@@ -330,7 +330,7 @@ export default {
</option>
</form-input>
<form-input
container-class="col-3"
container-class="col-auto"
:label="$p.t('lehre', 'studiensemester')"
type="select"
v-model="studiensemester"
@@ -89,6 +89,16 @@ export default {
}
},
computed: {
// student in the modal title, so an interrupted user sees whom they edit
studentInfo() {
const s = this.student;
return [
s.vorname + ' ' + s.nachname,
s.uid,
s.studiengang,
s.semester != null && s.semester !== '' ? this.$p.t('lehre', 'semester') + ' ' + s.semester : ''
].filter(Boolean).join(' | ');
},
tabulatorOptions() {
const options = {
ajaxURL: 'dummy',
@@ -363,17 +373,17 @@ export default {
@hideBsModal="resetFormData"
>
<template #title>
<p v-if="statusNew" class="fw-bold mt-3">{{$p.t('projektarbeit', 'projektarbeitAnlegen')}}</p>
<p v-else class="fw-bold mt-3">{{$p.t('projektarbeit', 'projektarbeitBearbeiten')}}</p>
<p v-if="statusNew" class="fw-bold mt-3">{{$p.t('projektarbeit', 'projektarbeitAnlegen')}} – {{studentInfo}}</p>
<p v-else class="fw-bold mt-3">{{$p.t('projektarbeit', 'projektarbeitBearbeiten')}} – {{studentInfo}}</p>
</template>
<div class="row" >
<div :class="statusNew ? 'col-12' : 'col-6'">
<div :class="statusNew ? 'col-12' : 'col-12 col-xl-6'">
<projektarbeit-details ref="projektarbeitDetails" :student="student" @projekttyp-changed="setDefaultStunden">
</projektarbeit-details>
</div>
<div :class="statusNew ? '' : 'col-6'" :style="statusNew ? 'display: none' : ''">
<div :class="statusNew ? '' : 'col-12 col-xl-6'" :style="statusNew ? 'display: none' : ''">
<projektbetreuer ref="projektbetreuer" :config="config" @betreuer-saved="reload"></projektbetreuer>
</div>
</div>
@@ -193,6 +193,7 @@ export default {
autocompleteSelectedBetreuer: null,
beurteilungDownloadLink: null,
vertragFieldsDisabled: false,
stundenOverwritten: false,
abortController: {
betreuer: null
}
@@ -356,6 +357,7 @@ export default {
if (this.beurteilungDownloadLink !== null) this.beurteilungDownloadLink = '';
this.autocompleteSelectedBetreuer = null;
this.initialFormData = null;
this.stundenOverwritten = false;
if (this.projekttyp_kurzbz) this.setDefaultStunden(this.projekttyp_kurzbz);
this.disableVertragFields(false);
this.$refs.formProjektbetreuer.clearValidation();
@@ -402,8 +404,10 @@ export default {
return preparedFormData;
},
// get default values for stunden
getDefaultStunden(projekttyp_kurzbz) {
// get default values for stunden, a Betreuerart default wins over the Projekttyp default
getDefaultStunden(projekttyp_kurzbz, betreuerart_kurzbz) {
const betreuerartStunden = this.config.defaultProjektbetreuerStundenBetreuerart?.[betreuerart_kurzbz];
if (betreuerartStunden !== undefined) return betreuerartStunden;
let stunden = '0.0';
if (projekttyp_kurzbz == 'Bachelor') stunden = this.config.defaultProjektbetreuerStunden;
if (projekttyp_kurzbz == 'Diplom') stunden = this.config.defaultProjektbetreuerStundenDiplom;
@@ -414,10 +418,17 @@ export default {
// set default stunden if not in edit mode (so hours of editen person are not overwritten)
if (!this.editMode)
{
let defaultStunden = this.getDefaultStunden(projekttyp_kurzbz);
let defaultStunden = this.getDefaultStunden(projekttyp_kurzbz, this.formData.betreuerart_kurzbz);
this.formData.stunden = defaultStunden;
}
},
// also in edit mode, but the hours of an accepted Vertrag stay
betreuerartChanged() {
if (this.vertragFieldsDisabled) return;
this.formData.stunden = this.getDefaultStunden(this.projekttyp_kurzbz, this.formData.betreuerart_kurzbz);
// mark hours that differ from the saved ones, so the user notices the change
this.stundenOverwritten = this.editMode && Number(this.formData.stunden) !== Number(this.initialFormData?.stunden);
},
getDefaultStundensaetze(person_id) {
return this.$api
.call(ApiStvProjektbetreuer.getDefaultStundensaetze(person_id, this.studiensemester_kurzbz))
@@ -518,6 +529,7 @@ export default {
type="select"
v-model="formData.betreuerart_kurzbz"
name="betreuerart_kurzbz"
@change="betreuerartChanged"
>
<option
v-for="art in arrBetreuerart"
@@ -548,7 +560,7 @@ export default {
</form-input>
</div>
<div class="row mb-3">
<div class="row mb-3 align-items-end">
<div class="col-6">
<form-input
container-class="stv-details-projektarbeit-stunden"
@@ -556,7 +568,9 @@ export default {
name="stunden"
:label="$p.t('projektarbeit', 'stunden')"
:disabled="vertragFieldsDisabled"
:class="stundenOverwritten ? 'border-warning bg-warning-subtle' : ''"
v-model="formData.stunden"
@input="stundenOverwritten = false"
>
</form-input>
</div>