Merge branch 'feature-30660/FHC4_StudierendenGUI_Prototyp' of github.com:FH-Complete/FHC-Core into feature-30660/FHC4_StudierendenGUI_Prototyp

This commit is contained in:
ma0068
2024-05-27 08:53:54 +02:00
7 changed files with 190 additions and 195 deletions
@@ -28,7 +28,6 @@ class Favorites extends FHCAPI_Controller
{
public function __construct()
{
// TODO(chris): access!
parent::__construct([
'index' => self::PERM_LOGGED,
'set' => self::PERM_LOGGED
@@ -58,10 +57,8 @@ class Favorites extends FHCAPI_Controller
$this->form_validation->set_rules('favorites', 'Favorites', 'required');
if ($this->form_validation->run() == false) {
$this->output->set_status_header(REST_Controller::HTTP_BAD_REQUEST);
return $this->outputJson($this->form_validation->error_array());
}
if (!$this->form_validation->run())
$this->terminateWithValidationErrors($this->form_validation->error_array());
$favorites = $this->input->post('favorites');
@@ -134,9 +134,9 @@ class Student extends FHCAPI_Controller
$result = $this->udflib->getCiValidations($this->PersonModel, $this->input->post());
//TODO(Manu) check with Chris: input number not allowed
$fieldValidations = $this->getDataOrTerminateWithError($result);
$field_validations = $this->getDataOrTerminateWithError($result);
$this->form_validation->set_rules($fieldvalidations);
$this->form_validation->set_rules($field_validations);
if (!$this->form_validation->run())
$this->terminateWithValidationErrors($this->form_validation->error_array());
@@ -259,9 +259,7 @@ class Student extends FHCAPI_Controller
{
$this->load->library('form_validation');
$this->form_validation->set_rules('gebdatum', 'Geburtsdatum', 'callback_isValidDate', [
'isValidDate' => $this->p->t('ui', 'error_invalid_date')
]);
$this->form_validation->set_rules('gebdatum', 'Geburtsdatum', 'is_valid_date');
if (!$this->form_validation->run())
$this->terminateWithValidationErrors($this->form_validation->error_array());
@@ -145,7 +145,7 @@ class Verband extends FHCAPI_Controller
$this->StudiengangModel->addSelect("CONCAT(UPPER(CONCAT(typ, kurzbz)), '-', semester, (SELECT CASE WHEN bezeichnung IS NULL OR bezeichnung='' THEN ''::TEXT ELSE CONCAT(' (', bezeichnung, ')') END FROM public.tbl_lehrverband WHERE studiengang_kz=v.studiengang_kz AND semester=v.semester ORDER BY verband, gruppe LIMIT 1)) AS name", false);
$this->StudiengangModel->addSelect('semester');
$this->StudiengangModel->addSelect($this->StudiengangModel->escape($studiengang_kz) . ' AS stg_kz', false);
$this->StudiengangModel->addSelect($this->StudiengangModel->escape($studiengang_kz) . '::integer AS stg_kz', false);
$this->StudiengangModel->addOrder('semester');
@@ -223,7 +223,7 @@ class Verband extends FHCAPI_Controller
$this->GruppeModel->addSelect('sort');
$this->GruppeModel->addSelect('gruppe_kurzbz');
$this->GruppeModel->addSelect($this->GruppeModel->escape($studiengang_kz) . ' AS stg_kz', false);
$this->GruppeModel->addSelect($this->GruppeModel->escape($studiengang_kz) . '::integer AS stg_kz', false);
$this->GruppeModel->addOrder('sort');
$this->GruppeModel->addOrder('gruppe_kurzbz');
@@ -299,7 +299,7 @@ class Verband extends FHCAPI_Controller
$this->StudiengangModel->addSelect("TRUE AS leaf", false);
$this->StudiengangModel->addSelect('gruppe');
$this->StudiengangModel->addSelect($this->StudiengangModel->escape($studiengang_kz) . ' AS stg_kz', false);
$this->StudiengangModel->addSelect($this->StudiengangModel->escape($studiengang_kz) . '::integer AS stg_kz', false);
$this->StudiengangModel->addOrder('gruppe');
@@ -343,6 +343,8 @@ class Verband extends FHCAPI_Controller
$studiensemester = $this->getDataOrTerminateWithError($result);
$result = [];
$studiengang_kz = (int)$studiengang_kz;
foreach ($studiensemester as $sem) {
$semlink = $link . $sem->studiensemester_kurzbz;
$intlink = $semlink . '/interessenten';
@@ -168,55 +168,6 @@ class Students extends FHC_Controller
$stdsemEsc = $this->PrestudentModel->escape($studiensemester_kurzbz);
$this->PrestudentModel->addJoin('public.tbl_person p', 'person_id');
#$this->PrestudentModel->addJoin('public.tbl_prestudentstatus ps', 'ps.status_kurzbz=public.get_rolle_prestudent(tbl_prestudent.prestudent_id, ' . $this->PrestudentModel->escape($studiensemester_kurzbz) . ') AND ps.prestudent_id=tbl_prestudent.prestudent_id');
$this->PrestudentModel->addJoin('public.tbl_prestudentstatus ps', 'ps.status_kurzbz=public.get_rolle_prestudent(tbl_prestudent.prestudent_id, ' . $stdsemEsc . ') AND ps.prestudent_id=tbl_prestudent.prestudent_id AND ps.studiensemester_kurzbz=public.get_stdsem_prestudent(tbl_prestudent.prestudent_id, ' . $stdsemEsc . ') AND ps.ausbildungssemester=public.get_absem_prestudent(tbl_prestudent.prestudent_id, ' . $stdsemEsc . ')', 'LEFT');
// TODO(chris): check what functions are returning when no entry exists
$this->PrestudentModel->addSelect('p.person_id');
$this->PrestudentModel->addSelect('tbl_prestudent.prestudent_id');
$this->PrestudentModel->addSelect("'' AS uid");
$this->PrestudentModel->addSelect('titelpre');
$this->PrestudentModel->addSelect('titelpost');
$this->PrestudentModel->addSelect('vorname');
$this->PrestudentModel->addSelect('wahlname');
$this->PrestudentModel->addSelect('vornamen');
$this->PrestudentModel->addSelect('geschlecht');
$this->PrestudentModel->addSelect('nachname');
$this->PrestudentModel->addSelect('gebdatum');
$this->PrestudentModel->addSelect('tbl_prestudent.anmerkung');
$this->PrestudentModel->addSelect('ersatzkennzeichen');
$this->PrestudentModel->addSelect('svnr');
$this->PrestudentModel->addSelect("'' AS matrikelnr");
$this->PrestudentModel->addSelect('p.anmerkung AS anmerkungen');
$this->PrestudentModel->addSelect("'' AS semester");
$this->PrestudentModel->addSelect("'' AS verband");
$this->PrestudentModel->addSelect("'' AS gruppe");
$this->PrestudentModel->addSelect('tbl_prestudent.studiengang_kz');
$this->PrestudentModel->addSelect('aufmerksamdurch_kurzbz');
$this->PrestudentModel->addSelect('mentor');
$this->PrestudentModel->addSelect('FALSE AS bnaktiv');
$this->PrestudentModel->addSelect(
"(SELECT kontakt FROM public.tbl_kontakt WHERE kontakttyp='email' AND person_id=p.person_id AND zustellung LIMIT 1) AS email_privat",
false
);
$this->PrestudentModel->addSelect(
"(SELECT rt_gesamtpunkte AS punkte FROM public.tbl_prestudent WHERE prestudent_id=s.prestudent_id) AS punkte",
false
);
$this->PrestudentModel->addSelect('tbl_prestudent.dual');
$this->PrestudentModel->addSelect('tbl_prestudent.reihungstest_id');
$this->PrestudentModel->addSelect('tbl_prestudent.anmeldungreihungstest');
$this->PrestudentModel->addSelect('p.matr_nr');
$this->PrestudentModel->addSelect('tbl_prestudent.gsstudientyp_kurzbz');
$this->PrestudentModel->addSelect('tbl_prestudent.aufnahmegruppe_kurzbz');
$this->PrestudentModel->addSelect('tbl_prestudent.priorisierung');
$this->PrestudentModel->addSelect('p.zugangscode');
$this->PrestudentModel->addSelect('p.bpk');
$this->PrestudentModel->addOrder('nachname');
$this->PrestudentModel->addOrder('vorname');
$where = [];
if ($orgform_kurzbz) {
$where['ps.orgform_kurzbz'] = $orgform_kurzbz;
@@ -322,6 +273,55 @@ class Students extends FHC_Controller
break;
}
$this->PrestudentModel->addJoin('public.tbl_person p', 'person_id');
#$this->PrestudentModel->addJoin('public.tbl_prestudentstatus ps', 'ps.status_kurzbz=public.get_rolle_prestudent(tbl_prestudent.prestudent_id, ' . $this->PrestudentModel->escape($studiensemester_kurzbz) . ') AND ps.prestudent_id=tbl_prestudent.prestudent_id');
$this->PrestudentModel->addJoin('public.tbl_prestudentstatus ps', 'ps.status_kurzbz=public.get_rolle_prestudent(tbl_prestudent.prestudent_id, ' . $stdsemEsc . ') AND ps.prestudent_id=tbl_prestudent.prestudent_id AND ps.studiensemester_kurzbz=public.get_stdsem_prestudent(tbl_prestudent.prestudent_id, ' . $stdsemEsc . ') AND ps.ausbildungssemester=public.get_absem_prestudent(tbl_prestudent.prestudent_id, ' . $stdsemEsc . ')', 'LEFT');
// TODO(chris): check what functions are returning when no entry exists
$this->PrestudentModel->addSelect('p.person_id');
$this->PrestudentModel->addSelect('tbl_prestudent.prestudent_id');
$this->PrestudentModel->addSelect("'' AS uid");
$this->PrestudentModel->addSelect('titelpre');
$this->PrestudentModel->addSelect('titelpost');
$this->PrestudentModel->addSelect('vorname');
$this->PrestudentModel->addSelect('wahlname');
$this->PrestudentModel->addSelect('vornamen');
$this->PrestudentModel->addSelect('geschlecht');
$this->PrestudentModel->addSelect('nachname');
$this->PrestudentModel->addSelect('gebdatum');
$this->PrestudentModel->addSelect('tbl_prestudent.anmerkung');
$this->PrestudentModel->addSelect('ersatzkennzeichen');
$this->PrestudentModel->addSelect('svnr');
$this->PrestudentModel->addSelect("'' AS matrikelnr");
$this->PrestudentModel->addSelect('p.anmerkung AS anmerkungen');
$this->PrestudentModel->addSelect("'' AS semester");
$this->PrestudentModel->addSelect("'' AS verband");
$this->PrestudentModel->addSelect("'' AS gruppe");
$this->PrestudentModel->addSelect('tbl_prestudent.studiengang_kz');
$this->PrestudentModel->addSelect('aufmerksamdurch_kurzbz');
$this->PrestudentModel->addSelect('mentor');
$this->PrestudentModel->addSelect('FALSE AS bnaktiv');
$this->PrestudentModel->addSelect(
"(SELECT kontakt FROM public.tbl_kontakt WHERE kontakttyp='email' AND person_id=p.person_id AND zustellung LIMIT 1) AS email_privat",
false
);
$this->PrestudentModel->addSelect(
"(SELECT rt_gesamtpunkte AS punkte FROM public.tbl_prestudent WHERE prestudent_id=s.prestudent_id) AS punkte",
false
);
$this->PrestudentModel->addSelect('tbl_prestudent.dual');
$this->PrestudentModel->addSelect('tbl_prestudent.reihungstest_id');
$this->PrestudentModel->addSelect('tbl_prestudent.anmeldungreihungstest');
$this->PrestudentModel->addSelect('p.matr_nr');
$this->PrestudentModel->addSelect('tbl_prestudent.gsstudientyp_kurzbz');
$this->PrestudentModel->addSelect('tbl_prestudent.aufnahmegruppe_kurzbz');
$this->PrestudentModel->addSelect('tbl_prestudent.priorisierung');
$this->PrestudentModel->addSelect('p.zugangscode');
$this->PrestudentModel->addSelect('p.bpk');
$this->PrestudentModel->addOrder('nachname');
$this->PrestudentModel->addOrder('vorname');
$this->addFilter($studiensemester_kurzbz);
$this->outputJson([]);
@@ -291,128 +291,129 @@ export default{
})
.catch(this.$fhcAlert.handleSystemError)
},
// TODO(chris): use Form Component
template: `
<div class="stv-list h-100 pt-3">
<div class="stv-details-kontakt-address h-100 pt-3">
<!--Modal: Add Address-->
<BsModal ref="newAdressModal">
<bs-modal ref="newAdressModal">
<template #title>{{$p.t('person', 'adresse_new')}}</template>
<form class="row g-3" ref="addressData">
<div class="row mb-3">
<label for="adressentyp" class="form-label col-sm-4">{{$p.t('global', 'typ')}}</label>
<div class="col-sm-6">
<select id="adressentyp" class="form-select" v-model="addressData.typ">
<option v-for="typ in adressentypen" :key="typ.adressentyp_kurzbz" :value="typ.adressentyp_kurzbz" >{{typ.bezeichnung}}</option>
</select>
</div>
<form class="row g-3" ref="addressData">
<div class="row mb-3">
<label for="adressentyp" class="form-label col-sm-4">{{$p.t('global', 'typ')}}</label>
<div class="col-sm-6">
<select id="adressentyp" class="form-select" v-model="addressData.typ">
<option v-for="typ in adressentypen" :key="typ.adressentyp_kurzbz" :value="typ.adressentyp_kurzbz" >{{typ.bezeichnung}}</option>
</select>
</div>
<div class="row mb-3">
<label for="strasse" class="form-label col-sm-4">{{$p.t('person', 'strasse')}}</label>
<div class="col-sm-6">
<input type="text" class="form-control" id="strasse" v-model="addressData['strasse']">
</div>
</div>
<div class="row mb-3">
<label for="nation" class="form-label col-sm-4">{{$p.t('person', 'nation')}}</label>
<div class="col-sm-6">
<select id="nation" class="form-select" v-model="addressData.nation">
<option v-for="nation in nations" :key="nation.nation_code" :value="nation.nation_code" :disabled="nation.sperre">{{nation.kurztext}}</option>
</select>
</div>
</div>
<div class="row mb-3">
<label for="plz" class="required form-label col-sm-4" >{{$p.t('person', 'plz')}}</label>
<div class="col-sm-6">
<input type="text" class="form-control" required v-model="addressData['plz']" @input="loadPlaces" >
</div>
</div>
<div class="row mb-3">
<label for="strasse" class="form-label col-sm-4">{{$p.t('person', 'strasse')}}</label>
<div class="col-sm-6">
<input type="text" class="form-control" id="strasse" v-model="addressData['strasse']">
</div>
</div>
<div class="row mb-3">
<label for="gemeinde" class="form-label col-sm-4">{{$p.t('person', 'gemeinde')}}</label>
<div class="col-sm-6">
<select v-if="addressData['nation'] == 'A'" name="addressData[gemeinde]" class="form-select" v-model="addressData['gemeinde']">
<option v-if="!gemeinden.length" disabled>Bitte gültige PLZ wählen</option>
<option v-for="gemeinde in gemeinden" :key="gemeinde.name" :value="gemeinde.name">{{gemeinde.name}}</option>
</select>
<input v-else type="text" class="form-control" v-model="addressData['gemeinde']">
</div>
<div class="row mb-3">
<label for="nation" class="form-label col-sm-4">{{$p.t('person', 'nation')}}</label>
<div class="col-sm-6">
<select id="nation" class="form-select" v-model="addressData.nation">
<option v-for="nation in nations" :key="nation.nation_code" :value="nation.nation_code" :disabled="nation.sperre">{{nation.kurztext}}</option>
</select>
</div>
</div>
<div class="row mb-3">
<label for="plz" class="required form-label col-sm-4" >{{$p.t('person', 'plz')}}</label>
<div class="col-sm-6">
<input type="text" class="form-control" required v-model="addressData['plz']" @input="loadPlaces" >
</div>
</div>
<div class="row mb-3">
<label for="gemeinde" class="form-label col-sm-4">{{$p.t('person', 'gemeinde')}}</label>
<div class="col-sm-6">
<select v-if="addressData['nation'] == 'A'" name="addressData[gemeinde]" class="form-select" v-model="addressData['gemeinde']">
<option v-if="!gemeinden.length" disabled>Bitte gültige PLZ wählen</option>
<option v-for="gemeinde in gemeinden" :key="gemeinde.name" :value="gemeinde.name">{{gemeinde.name}}</option>
</select>
<input v-else type="text" class="form-control" v-model="addressData['gemeinde']">
</div>
</div>
<div class="row mb-3">
<label for="Ort" class="form-label col-sm-4">{{$p.t('person', 'ort')}}</label>
<div class="col-sm-6">
<select v-if="addressData['nation'] == 'A'" name="address[ort]" class="form-select" v-model="addressData['ort']">
<option v-if="!orte.length" disabled>Bitte gültige Gemeinde wählen</option>
<option v-for="ort in orte" :key="ort.ortschaftsname" :value="ort.ortschaftsname">{{ort.ortschaftsname}}</option>
</select>
<input v-else type="text" name="ort" class="form-control" v-model="addressData['ort']">
</div>
</div>
<div class="row mb-3">
<label for="heimatadresse" class="form-label col-sm-4">{{$p.t('person', 'heimatadresse')}}</label>
<div class="col-sm-3">
<div class="form-check">
<input id="heimatadresse" type="checkbox" class="form-check-input" value="1" v-model="addressData['heimatadresse']">
</div>
</div>
</div>
<div class="row mb-3">
<label for="Ort" class="form-label col-sm-4">{{$p.t('person', 'ort')}}</label>
<div class="col-sm-6">
<select v-if="addressData['nation'] == 'A'" name="address[ort]" class="form-select" v-model="addressData['ort']">
<option v-if="!orte.length" disabled>Bitte gültige Gemeinde wählen</option>
<option v-for="ort in orte" :key="ort.ortschaftsname" :value="ort.ortschaftsname">{{ort.ortschaftsname}}</option>
</select>
<input v-else type="text" name="ort" class="form-control" v-model="addressData['ort']">
</div>
</div>
<div class="row mb-3">
<label for="heimatadresse" class="form-label col-sm-4">{{$p.t('person', 'heimatadresse')}}</label>
<div class="col-sm-3">
<div class="form-check">
<input id="heimatadresse" type="checkbox" class="form-check-input" value="1" v-model="addressData['heimatadresse']">
</div>
<div class="row mb-3">
<label for="zustelladresse" class="form-label col-sm-4">{{$p.t('person', 'zustelladresse')}}</label>
<div class="col-sm-3">
<div class="form-check">
<input id="zustelladresse" type="checkbox" class="form-check-input" value="1" v-model="addressData['zustelladresse']">
</div>
</div>
<div class="row mb-3">
<label for="zustelladresse" class="form-label col-sm-4">{{$p.t('person', 'zustelladresse')}}</label>
<div class="col-sm-3">
<div class="form-check">
<input id="zustelladresse" type="checkbox" class="form-check-input" value="1" v-model="addressData['zustelladresse']">
</div>
</div>
<div class="row mb-3">
<label for="co_name" class="form-label col-sm-4">{{$p.t('person', 'co_name')}}</label>
<div class="col-sm-6">
<input type="text" id="co_name" class="form-control" v-model="addressData['co_name']">
</div>
</div>
<div class="row mb-3">
<label for="rechnungsadresse" class="form-label col-sm-4">{{$p.t('person', 'rechnungsadresse')}}</label>
<div class="col-sm-3">
<div class="form-check">
<input id="rechnungsadresse" type="checkbox" class="form-check-input" v-model="addressData['rechnungsadresse']">
</div>
</div>
<div class="row mb-3">
<label for="co_name" class="form-label col-sm-4">{{$p.t('person', 'co_name')}}</label>
<div class="col-sm-6">
<input type="text" id="co_name" class="form-control" v-model="addressData['co_name']">
</div>
</div>
<div class="row mb-3">
<label for="firma_name" class="form-label col-sm-4">{{$p.t('person', 'firma')}}</label>
<div class="col-sm-3">
<PvAutoComplete v-model="addressData['firma']" optionLabel="name" :suggestions="filteredFirmen" @complete="search" :min-length="3"/>
</div>
<div class="row mb-3">
<label for="rechnungsadresse" class="form-label col-sm-4">{{$p.t('person', 'rechnungsadresse')}}</label>
<div class="col-sm-3">
<div class="form-check">
<input id="rechnungsadresse" type="checkbox" class="form-check-input" v-model="addressData['rechnungsadresse']">
</div>
</div>
</div>
<div class="row mb-3">
<label for="name" class="form-label col-sm-4">{{$p.t('person', 'firma_zusatz')}}</label>
<div class="col-sm-6">
<input type="text" class="form-control" id="name" v-model="addressData['name']">
</div>
<div class="row mb-3">
<label for="firma_name" class="form-label col-sm-4">{{$p.t('person', 'firma')}}</label>
<div class="col-sm-3">
<PvAutoComplete v-model="addressData['firma']" optionLabel="name" :suggestions="filteredFirmen" @complete="search" :min-length="3"/>
</div>
</div>
<div class="row mb-3">
<label for="name" class="form-label col-sm-4">{{$p.t('person', 'firma_zusatz')}}</label>
<div class="col-sm-6">
<input type="text" class="form-control" id="name" v-model="addressData['name']">
</div>
</div>
<div class="row mb-3">
<label for="anmerkung" class="form-label col-sm-4">{{$p.t('global', 'anmerkung')}}</label>
<div class="col-sm-6">
<input type="text" class="form-control" id="anmerkung" v-model="addressData['anmerkung']">
</div>
</div>
<div class="row mb-3">
<label for="anmerkung" class="form-label col-sm-4">{{$p.t('global', 'anmerkung')}}</label>
<div class="col-sm-6">
<input type="text" class="form-control" id="anmerkung" v-model="addressData['anmerkung']">
</div>
</div>
</form>
<template #footer>
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">{{$p.t('ui', 'abbrechen')}}</button>
<button type="button" class="btn btn-primary" @click="addNewAddress()">OK</button>
</template>
</BsModal>
</bs-modal>
<!--Modal: Edit Address-->
<BsModal ref="editAdressModal">
<bs-modal ref="editAdressModal">
<template #title>{{$p.t('person', 'adresse_edit')}}</template>
<form class="row g-3" ref="addressData">
<div class="row mb-3">
@@ -448,28 +449,28 @@ export default{
</div>
<div class="row mb-3">
<label for="gemeinde" class="form-label col-sm-4">{{$p.t('person', 'gemeinde')}}</label>
<div v-if="addressData['gemeinde']" class="col-sm-6">
<input type="text" class="form-control" v-model="addressData['gemeinde']">
</div>
<div v-else class="col-sm-6">
<select v-if="addressData['nation'] == 'A'" name="addressData[gemeinde]" class="form-select" v-model="addressData['gemeinde']">
<option v-if="!gemeinden.length" disabled>{{$p.t('person', 'plz_waehlen')}}</option>
<option v-for="gemeinde in gemeinden" :key="gemeinde.name" :value="gemeinde.name">{{gemeinde.name}}</option>
</select>
</div>
<div v-if="addressData['gemeinde']" class="col-sm-6">
<input type="text" class="form-control" v-model="addressData['gemeinde']">
</div>
<div v-else class="col-sm-6">
<select v-if="addressData['nation'] == 'A'" name="addressData[gemeinde]" class="form-select" v-model="addressData['gemeinde']">
<option v-if="!gemeinden.length" disabled>{{$p.t('person', 'plz_waehlen')}}</option>
<option v-for="gemeinde in gemeinden" :key="gemeinde.name" :value="gemeinde.name">{{gemeinde.name}}</option>
</select>
</div>
</div>
<div class="row mb-3">
<label for="Ort" class="form-label col-sm-4">{{$p.t('person', 'ort')}}</label>
<div v-if="addressData['ort']" class="col-sm-6">
<input type="text" name="ort" class="form-control" v-model="addressData['ort']">
</div>
<div v-else class="col-sm-6">
<select v-if="addressData['nation'] == 'A'" name="address[ort]" class="form-select" v-model="addressData['ort']">
<option v-if="!orte.length" disabled>{{$p.t('person', 'gemeinde_waehlen')}}</option>
<option v-for="ort in orte" :key="ort.ortschaftsname" :value="ort.ortschaftsname">{{ort.ortschaftsname}}</option>
</select>
</div>
<label for="Ort" class="form-label col-sm-4">{{$p.t('person', 'ort')}}</label>
<div v-if="addressData['ort']" class="col-sm-6">
<input type="text" name="ort" class="form-control" v-model="addressData['ort']">
</div>
<div v-else class="col-sm-6">
<select v-if="addressData['nation'] == 'A'" name="address[ort]" class="form-select" v-model="addressData['ort']">
<option v-if="!orte.length" disabled>{{$p.t('person', 'gemeinde_waehlen')}}</option>
<option v-for="ort in orte" :key="ort.ortschaftsname" :value="ort.ortschaftsname">{{ort.ortschaftsname}}</option>
</select>
</div>
</div>
<div class="row mb-3">
@@ -508,12 +509,12 @@ export default{
<div class="row mb-3">
<label for="firma_name" class="form-label col-sm-4">{{$p.t('person', 'firma')}}</label>
<div v-if="addressData.firmenname" class="col-sm-6">
<input type="text" class="form-control" id="name" v-model="addressData.firmenname">
</div>
<div v-else class="col-sm-6">
<PvAutoComplete v-model="addressData['firma']" optionLabel="name" :suggestions="filteredFirmen" @complete="search" :min-length="3"/>
</div>
<div v-if="addressData.firmenname" class="col-sm-6">
<input type="text" class="form-control" id="name" v-model="addressData.firmenname">
</div>
<div v-else class="col-sm-6">
<PvAutoComplete v-model="addressData['firma']" optionLabel="name" :suggestions="filteredFirmen" @complete="search" :min-length="3"/>
</div>
</div>
<div class="row mb-3">
@@ -539,10 +540,10 @@ export default{
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal" @click="resetModal">{{$p.t('ui', 'abbrechen')}}</button>
<button ref="Close" type="button" class="btn btn-primary" @click="updateAddress(addressData.adresse_id)">OK</button>
</template>
</BsModal>
</bs-modal>
<!--Modal: deleteAdressModal-->
<BsModal ref="deleteAdressModal">
<bs-modal ref="deleteAdressModal">
<template #title>{{$p.t('person', 'adresse_delete')}}</template>
<template #default>
<p>{{$p.t('person', 'adresse_confirm_delete')}}</p>
@@ -551,7 +552,7 @@ export default{
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal" @click="resetModal">{{$p.t('ui', 'abbrechen')}}</button>
<button ref="Close" type="button" class="btn btn-primary" @click="deleteAddress(addressData.adresse_id)">OK</button>
</template>
</BsModal>
</bs-modal>
<core-filter-cmpt
ref="table"
@@ -564,10 +565,7 @@ export default{
new-btn-label="Adresse"
@click:new="actionNewAdress"
>
<button v-if="reload" class="btn btn-outline-warning" aria-label="Reload">
<span class="fa-solid fa-rotate-right" aria-hidden="true"></span>
</button>
</core-filter-cmpt>
</div>`
</div>`
};
@@ -107,7 +107,7 @@ export default {
this.abortController.suggestions = new AbortController();
// TODO(chris): move to fhcapi.factory
this.$fhcapi
this.$fhcApi
.post('api/frontend/v1/stv/student/check', {
vorname: this.formData.vorname,
nachname: this.formData.nachname,
@@ -37,7 +37,7 @@ export default {
let res = arr.filter(n => n.key == key);
if (res.length)
return res.pop();
res = arr.map(n => n.children ? this.findNodeByKey(key, n.children) : null).filter();
res = arr.map(n => n.children ? this.findNodeByKey(key, n.children) : null).filter(a => a);
if (res.length)
return res.pop();
return null;