Tab Prestudent: ZGVFields: Add Autocomplete function with strike through for not active entries

This commit is contained in:
ma0068
2025-07-25 14:05:37 +02:00
parent 58a85432ca
commit e2df03debf
2 changed files with 114 additions and 17 deletions
@@ -174,7 +174,11 @@ class Prestudent extends FHCAPI_Controller
{
$this->load->model('codex/Zgv_model', 'ZgvModel');
$this->ZgvModel->addOrder('zgv_code');
$this->ZgvModel->addSelect('zgv_code');
$this->ZgvModel->addSelect('zgv_bez');
$this->ZgvModel->addSelect('aktiv');
$this->ZgvModel->addSelect('zgv_bez as label');
$this->ZgvModel->addOrder('zgv_bez');
$result = $this->ZgvModel->load();
if (isError($result))
@@ -188,7 +192,11 @@ class Prestudent extends FHCAPI_Controller
{
$this->load->model('codex/Zgvdoktor_model', 'ZgvdoktorModel');
$this->ZgvdoktorModel->addOrder('zgvdoktor_code');
$this->ZgvdoktorModel->addSelect('zgvdoktor_code');
$this->ZgvdoktorModel->addSelect('zgvdoktor_bez');
$this->ZgvdoktorModel->addSelect('aktiv');
$this->ZgvdoktorModel->addSelect('zgvdoktor_bez as label');
$this->ZgvdoktorModel->addOrder('zgvdoktor_bez');
$result = $this->ZgvdoktorModel->load();
if (isError($result))
@@ -202,7 +210,11 @@ class Prestudent extends FHCAPI_Controller
{
$this->load->model('codex/Zgvmaster_model', 'ZgvmasterModel');
$this->ZgvmasterModel->addOrder('zgvmas_code');
$this->ZgvmasterModel->addSelect('zgvmas_code');
$this->ZgvmasterModel->addSelect('zgvmas_bez');
$this->ZgvmasterModel->addSelect('aktiv');
$this->ZgvmasterModel->addSelect('zgvmas_bez as label');
$this->ZgvmasterModel->addOrder('zgvmas_bez');
$result = $this->ZgvmasterModel->load();
if (isError($result))
@@ -60,7 +60,13 @@ export default {
listBisStandort: [],
initialFormData: {},
deltaArray: {},
actionUpdate: false
actionUpdate: false,
filteredZgvs: [],
selectedZgv: null,
filteredMasterZgvs: [],
selectedMasterZgv: null,
filteredDoktorZgvs: [],
selectedDoktorZgv: null
};
},
computed: {
@@ -86,7 +92,16 @@ export default {
},
modelValue(n){
this.loadPrestudent(n);
}
},
selectedZgv(newVal) {
this.data.zgv_code = newVal?.zgv_code || null;
},
selectedMasterZgv(newVal) {
this.data.zgvmas_code = newVal?.zgvmas_code || null;
},
selectedDoktorZgv(newVal) {
this.data.zgvdoktor_code = newVal?.zgvdoktor_code || null;
},
},
methods: {
@@ -96,6 +111,7 @@ export default {
.then(result => result.data)
.then(result => {
this.data = result;
//neue DataVariable um ein Delta der vorgenommenen Änderungen berechnen zu können
this.initialFormData = {...this.data};
})
@@ -118,6 +134,24 @@ export default {
window.scrollTo(0, 0);
});
},
filterZgvs(event){
const query = event.query.toLowerCase();
this.filteredZgvs = this.listZgvs.filter(item =>
item.label.toLowerCase().includes(query)
)
},
filterMasterZgvs(event){
const query = event.query.toLowerCase();
this.filteredMasterZgvs = this.listZgvsmaster.filter(item =>
item.label.toLowerCase().includes(query)
)
},
filterDoktorZgvs(event){
const query = event.query.toLowerCase();
this.filteredDoktorZgvs = this.listZgvsdoktor.filter(item =>
item.label.toLowerCase().includes(query)
)
},
},
created() {
this.loadPrestudent();
@@ -126,6 +160,9 @@ export default {
.then(result => result.data)
.then(result => {
this.listZgvs = result;
this.selectedZgv = this.listZgvs.find(
item => item.zgv_code === this.data.zgv_code
);
})
.catch(this.$fhcAlert.handleSystemError);
this.$api
@@ -133,6 +170,9 @@ export default {
.then(result => result.data)
.then(result => {
this.listZgvsmaster = result;
this.selectedMasterZgv = this.listZgvsmaster.find(
item => item.zgvmas_code === this.data.zgvmas_code
);
})
.catch(this.$fhcAlert.handleSystemError);
this.$api
@@ -140,6 +180,9 @@ export default {
.then(result => result.data)
.then(result => {
this.listZgvsdoktor = result;
this.selectedDoktorZgv = this.listZgvsdoktor.find(
item => item.zgvdoktor_code === this.data.zgvdoktor_code
);
})
.catch(this.$fhcAlert.handleSystemError);
this.$api
@@ -220,11 +263,25 @@ export default {
v-if="!config.hiddenFields.includes('zgv_code')"
container-class="col-3 stv-details-prestudent-zgv_code"
label="ZGV"
type="select"
v-model="data.zgv_code"
name="zgvcode"
type="autocomplete"
v-model="selectedZgv"
forceSelection
optionLabel="label"
optionValue="zgv_code"
:suggestions="filteredZgvs"
dropdown
name="zgv_code"
@complete="filterZgvs"
>
<option v-for="zgv in listZgvs" :key="zgv.zgv_code" :value="zgv.zgv_code">{{zgv.zgv_bez}}</option>
<template #option="slotProps">
<div
:class="!slotProps.option.aktiv
? 'item-inactive'
: ''"
>
{{slotProps.option.label}}
</div>
</template>
</form-input>
<form-input
v-if="!config.hiddenFields.includes('zgvOrt')"
@@ -234,7 +291,7 @@ export default {
v-model="data.zgvort"
name="zgvort"
>
</form-input>
</form-input>
<form-input
v-if="!config.hiddenFields.includes('zgvDatum')"
container-class="col-3 stv-details-prestudent-zgvDatum"
@@ -268,11 +325,25 @@ export default {
v-if="!config.hiddenFields.includes('zgvmas_code')"
container-class="col-3 stv-details-prestudent-zgvmas_code"
:label="$p.t('lehre', 'zgvMaster')"
type="select"
v-model="data.zgvmas_code"
name="zgvmascode"
type="autocomplete"
v-model="selectedMasterZgv"
forceSelection
optionLabel="label"
optionValue="zgvmas_code"
:suggestions="filteredMasterZgvs"
dropdown
name="zgvmas_code"
@complete="filterMasterZgvs"
>
<option v-for="mzgv in listZgvsmaster" :key="mzgv.zgvmas_code" :value="mzgv.zgvmas_code">{{mzgv.zgvmas_bez}}</option>
<template #option="slotProps">
<div
:class="!slotProps.option.aktiv
? 'item-inactive'
: ''"
>
{{slotProps.option.label}}
</div>
</template>
</form-input>
<form-input
v-if="!config.hiddenFields.includes('zgvmaort')"
@@ -317,11 +388,25 @@ export default {
v-if="!config.hiddenFields.includes('zgvdoktor_code')"
container-class="col-3 stv-details-prestudent-zgvdoktor_code"
:label="$p.t('lehre', 'zgvDoktor')"
type="select"
v-model="data.zgvdoktor_code"
type="autocomplete"
v-model="selectedDoktorZgv"
forceSelection
optionLabel="label"
optionValue="zgvdoktor_code"
:suggestions="filteredDoktorZgvs"
dropdown
name="zgvdoktor_code"
@complete="filterDoktorZgvs"
>
<option v-for="zgv in listZgvsdoktor" :key="zgv.zgvdoktor_code" :value="zgv.zgvdoktor_code">{{zgv.zgvdoktor_bez}}</option>
<template #option="slotProps">
<div
:class="!slotProps.option.aktiv
? 'item-inactive'
: ''"
>
{{slotProps.option.label}}
</div>
</template>
</form-input>
<form-input
v-if="!config.hiddenFields.includes('zgvdoktorort')"