Studierendenverwaltung Projektarbeiten: display of lv orgform only if present, hiding modal again after save, Betreuer can be edited after initial creation of Projektarbeit

This commit is contained in:
Alexei Karpenko
2025-09-12 02:02:31 +02:00
parent 3a06dc613f
commit 97f72caf90
3 changed files with 50 additions and 66 deletions
@@ -100,41 +100,7 @@ export default {
this.formData.anmerkung = null;
this.$refs.formDetails.clearValidation();
},
getFormData(statusNew, studiensemester_kurzbz, additional_lehrveranstaltung_id/*, successCallback*/) {
//~ let callArray = [
//~ this.$api.call(ApiStvProjektarbeit.getTypenProjektarbeit()),
//~ this.$api.call(ApiStvProjektarbeit.getLehrveranstaltungen(
//~ this.student.uid,
//~ projektarbeit_id ? null : this.student.studiengang_kz,
//~ studiensemester_kurzbz ?? this.defaultSemester,
//~ additional_lehrveranstaltung_id ?? null
//~ )),
//~ this.$api.call(ApiStvProjektarbeit.getNoten())
//~ ];
//~ if (projektarbeit_id) callArray.push(this.$api.call(ApiStvProjektarbeit.loadProjektarbeit(projektarbeit_id)));
//~ // Run when All promises are settled
//~ Promise.allSettled(callArray).then((results) => {
//~ let hasError = false;
//~ let allFormData = [];
//~ results.forEach((promise_result) => {
//~ if (promise_result.status === 'fulfilled' && promise_result.value.meta.status === "success") {
//~ allFormData.push(promise_result.value.data);
//~ } else {
//~ hasError = true;
//~ //this.$fhcAlert.handleSystemError(promise_result);
//~ }
//~ //let data = promise_result.value.data;
//~ });
//~ if (!hasError) {
//~ this.setFormData(allFormData[0], allFormData[1], allFormData[2], allFormData[3], allFormData[4] ?? null);
//~ if (successCallback) successCallback();
//~ }
//~ });
getFormData(statusNew, studiensemester_kurzbz, additional_lehrveranstaltung_id) {
this.$api
.call(ApiStvProjektarbeit.getTypenProjektarbeit())
@@ -162,6 +128,8 @@ export default {
this.arrNoten = result.data;
})
.catch(this.$fhcAlert.handleSystemError);
if (statusNew) this.resetForm();
},
loadProjektarbeit(projektarbeit_id) {
@@ -316,7 +284,7 @@ export default {
:key="lv.lehrveranstaltung_id"
:value="lv.lehrveranstaltung_id"
>
{{lv.bezeichnung + ' ' + lv.orgform_kurzbz + ' (' + lv.semester + ' Sem) ID: ' + lv.lehrveranstaltung_id}}
{{lv.bezeichnung + (lv.orgform_kurzbz ? ' ' + lv.orgform_kurzbz : '') + ' (' + lv.semester + ' Sem) ID: ' + lv.lehrveranstaltung_id}}
</option>
</form-input>
</div>
@@ -82,7 +82,6 @@ export default {
},
],
tabulatorData: [],
//lastSelected: null,
editedProjektarbeit: null,
statusNew: true,
studiensemester_kurzbz: null,
@@ -257,23 +256,19 @@ export default {
methods: {
actionNewProjektarbeit() {
this.statusNew = true;
this.editedProjektarbeit = null;
this.toggleMenu('details');
this.$refs.projektarbeitDetails.getFormData(this.statusNew);
this.$refs.projektarbeitModal.show();
},
actionEditProjektarbeit() {
this.statusNew = false;
this.toggleMenu('details');
this.$refs.projektarbeitDetails.getFormData(
this.statusNew, this.editedProjektarbeit.studiensemester_kurzbz, this.editedProjektarbeit.lehrveranstaltung_id
);
this.$refs.projektarbeitDetails.loadProjektarbeit(this.editedProjektarbeit.projektarbeit_id);
this.$refs.projektarbeitModal.show();
},
actionEditBetreuer() {
this.statusNew = false;
this.toggleMenu('betreuer');
this.$refs.projektbetreuer.getData(
this.editedProjektarbeit.projektarbeit_id, this.editedProjektarbeit.studiensemester_kurzbz, this.editedProjektarbeit.projekttyp_kurzbz
);
this.$refs.projektarbeitModal.show();
},
actionDeleteProjektarbeit(projektarbeit_id) {
@@ -313,6 +308,7 @@ export default {
projektarbeitSaved() {
this.reload();
this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successSave'));
this.hideModal('projektarbeitModal');
},
setDefaultStunden(projekttyp_kurzbz) {
this.$refs.projektbetreuer.setDefaultStunden(projekttyp_kurzbz);
@@ -325,6 +321,22 @@ export default {
},
toggleMenu(tabId) {
this.activeTab = tabId;
if (this.statusNew == false) {
switch(tabId) {
case 'details':
this.$refs.projektarbeitDetails.getFormData(
this.statusNew, this.editedProjektarbeit?.studiensemester_kurzbz, this.editedProjektarbeit?.lehrveranstaltung_id
);
this.$refs.projektarbeitDetails.loadProjektarbeit(this.editedProjektarbeit?.projektarbeit_id);
break;
case 'betreuer':
this.$refs.projektbetreuer.getFormData(
this.editedProjektarbeit ? this.editedProjektarbeit.projekttyp_kurzbz : null
);
this.$refs.projektbetreuer.getProjektbetreuer(this.editedProjektarbeit?.projektarbeit_id, this.editedProjektarbeit?.studiensemester_kurzbz);
break;
}
}
}
},
template: `
@@ -352,13 +364,13 @@ export default {
<p v-else class="fw-bold mt-3">{{$p.t('projektarbeit', 'projektarbeitBearbeiten')}}</p>
</template>
<template #modal-header-content>
<template #modal-header-content v-if="!statusNew">
<ul class="nav nav-tabs w-100 mt-3 msg_preview" id="pa_tabs" role="tablist">
<li class="nav-item" role="presentation">
<button class="nav-link" :class="activeTab == 'details' ? 'active' : ''" id="details-tab" data-bs-toggle="tab" data-bs-target="#details" type="button" role="tab" aria-controls="details" aria-selected="true" @click="actionEditProjektarbeit">Details</button>
<button class="nav-link" :class="activeTab == 'details' ? 'active' : ''" id="details-tab" data-bs-toggle="tab" data-bs-target="#details" type="button" role="tab" aria-controls="details" aria-selected="true" @click="toggleMenu('details')">Details</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link" :class="activeTab == 'betreuer' ? 'active' : ''" id="betreuer-tab" data-bs-toggle="tab" data-bs-target="#betreuer" type="button" role="tab" aria-controls="betreuer" aria-selected="false" @click="actionEditBetreuer">{{$p.t('projektarbeit', 'betreuerGross')}}</button>
<button class="nav-link" :class="activeTab == 'betreuer' ? 'active' : ''" id="betreuer-tab" data-bs-toggle="tab" data-bs-target="#betreuer" type="button" role="tab" aria-controls="betreuer" aria-selected="false" @click="toggleMenu('betreuer')">{{$p.t('projektarbeit', 'betreuerGross')}}</button>
</li>
</ul>
</template>
@@ -235,10 +235,7 @@ export default {
})
.catch(this.$fhcAlert.handleSystemError);
},
getData(projektarbeit_id, studiensemester_kurzbz, projekttyp_kurzbz) {
this.studiensemester_kurzbz = studiensemester_kurzbz;
getFormData(projekttyp_kurzbz) {
// default Stundensätze from config
this.defaultFormDataValues.stunden = this.getDefaultStunden(projekttyp_kurzbz);
this.defaultFormDataValues.stundensatz = this.config.defaultProjektbetreuerStundensatz;
@@ -257,21 +254,25 @@ export default {
this.arrNoten = result.data;
})
.catch(this.$fhcAlert.handleSystemError);
if (projektarbeit_id) {
this.projektarbeit_id = projektarbeit_id;
this.getProjektbetreuer();
} else {
this.$refs.projektbetreuerTable.tabulator.setData([]);
}
},
getProjektbetreuer() {
this.$api
.call(ApiStvProjektbetreuer.getProjektbetreuer(this.projektarbeit_id))
.then(result => {
this.$refs.projektbetreuerTable.tabulator.replaceData(this.addIds(result.data));
})
.catch(this.$fhcAlert.handleSystemError);
getProjektbetreuer(projektarbeit_id, studiensemester_kurzbz) {
if (projektarbeit_id) {
// if projektarbeit changed, reset the form to hold new data
if (this.projektarbeit_id != projektarbeit_id) {
this.resetForm();
this.resetModes();
}
this.projektarbeit_id = projektarbeit_id;
this.studiensemester_kurzbz = studiensemester_kurzbz;
this.$api
.call(ApiStvProjektbetreuer.getProjektbetreuer(this.projektarbeit_id))
.then(result => {
this.$refs.projektbetreuerTable.tabulator.replaceData(this.addIds(result.data));
})
.catch(this.$fhcAlert.handleSystemError);
} else {
this.emptyBetreuer();
}
},
saveProjektbetreuer() {
this.$refs.formProjektbetreuer.call(
@@ -279,7 +280,7 @@ export default {
)
.then(result => {
this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successSave'));
this.getProjektbetreuer();
this.getProjektbetreuer(this.projektarbeit_id, this.studiensemester_kurzbz);
this.resetModes();
})
.catch(this.$fhcAlert.handleSystemError);
@@ -296,6 +297,9 @@ export default {
this.filteredBetreuer = result.data;
});
},
emptyBetreuer() {
this.$refs.projektbetreuerTable.tabulator.clearData();
},
resetForm() {
this.formData = this.getDefaultFormData();
if (this.beurteilungDownloadLink !== null) this.beurteilungDownloadLink = '';