Start tab Abschlusspruefung, Table and Form with Dropdowns and default data

This commit is contained in:
ma0068
2024-11-27 12:52:03 +01:00
parent 222f31c464
commit 3318147ba0
12 changed files with 950 additions and 4 deletions
@@ -0,0 +1,169 @@
<?php
if (! defined('BASEPATH')) exit('No direct script access allowed');
use \DateTime as DateTime;
class Abschlusspruefung extends FHCAPI_Controller
{
public function __construct()
{
parent::__construct([
'getAbschlusspruefung' => ['admin:r', 'assistenz:r'],
'loadAbschlusspruefung' => ['admin:r', 'assistenz:r'],
'addNewAbschlusspruefung' => ['admin:rw', 'assistenz:rw'],
'updateAbschlusspruefung' => ['admin:rw', 'assistenz:rw'],
'deleteAbschlusspruefung' => ['admin:rw', 'assistenz:rw'],
'getTypenAbschlusspruefung' => ['admin:rw', 'assistenz:rw'],
'getNoten' => ['admin:rw', 'assistenz:rw'],
'getTypenAntritte' => ['admin:rw', 'assistenz:rw'],
'getBeurteilungen' => ['admin:rw', 'assistenz:rw'],
'getAkadGrade' => ['admin:rw', 'assistenz:rw'],
'getMitarbeiter' => ['admin:rw', 'assistenz:rw'],
'getPruefer' => ['admin:rw', 'assistenz:rw'],
'getTypStudiengang' => ['admin:rw', 'assistenz:rw'],
]);
// Load Libraries
$this->load->library('VariableLib', ['uid' => getAuthUID()]);
$this->load->library('form_validation');
// Load language phrases
$this->loadPhrases([
'ui',
'person',
'abschlusspruefung'
]);
// Load models
$this->load->model('education/Abschlusspruefung_model', 'AbschlusspruefungModel');
}
public function getAbschlusspruefung($student_uid)
{
$result = $this->AbschlusspruefungModel->getAbschlusspruefungForPrestudent($student_uid);
if (isError($result)) {
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
}
$this->terminateWithSuccess((getData($result) ?: []));
}
public function loadAbschlusspruefung()
{
$abschlusspruefung_id = $this->input->post('id');
$result = $this->AbschlusspruefungModel->loadWhere(
array('abschlusspruefung_id' => $abschlusspruefung_id)
);
if (isError($result)) {
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
}
$this->terminateWithSuccess((getData($result) ?: []));
}
public function getTypenAbschlusspruefung()
{
$this->load->model('education/Pruefungstyp_model', 'PruefungstypModel');
$result = $this->PruefungstypModel->loadWhere(
array('abschluss' => true)
);
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess($data);
}
public function getTypenAntritte()
{
$this->load->model('education/Pruefungsantritt_model', 'PruefungsantrittModel');
$result = $this->PruefungsantrittModel->load();
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess($data);
}
public function getBeurteilungen()
{
$this->load->model('education/Abschlussbeurteilung_model', 'AbschlussbeurteilungModel');
$result = $this->AbschlussbeurteilungModel->load();
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess($data);
}
public function getAkadGrade()
{
$studiengang_kz= $this->input->post('studiengang_kz');
$this->load->model('education/Akadgrad_model', 'AkadgradModel');
$result = $this->AkadgradModel->loadWhere(
array('studiengang_kz' => $studiengang_kz)
);
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess($data);
}
public function getTypStudiengang()
{
$studiengang_kz= $this->input->post('studiengang_kz');
$this->load->model('organisation/Studiengang_model', 'StudiengangModel');
$result = $this->StudiengangModel->loadWhere(
array('studiengang_kz' => $studiengang_kz)
);
$data = $this->getDataOrTerminateWithError($result);
$typStudiengang = current($data)->typ;
$this->terminateWithSuccess($typStudiengang);
}
public function getMitarbeiter($searchString)
{
$this->load->model('ressource/Mitarbeiter_model', 'MitarbeiterModel');
$result = $this->MitarbeiterModel->searchMitarbeiter($searchString, 'mitAkadGrad');
if (isError($result)) {
$this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
}
$this->terminateWithSuccess($result ?: []);
}
public function getPruefer($searchString)
{
$this->load->model('ressource/Mitarbeiter_model', 'MitarbeiterModel');
$result = $this->MitarbeiterModel->searchMitarbeiter($searchString, 'ohneMaUid');
if (isError($result)) {
$this->terminateWithError($result, self::ERROR_TYPE_GENERAL);
}
$this->terminateWithSuccess($result ?: []);
}
public function getNoten()
{
$this->load->model('education/Note_model', 'NoteModel');
$this->NoteModel->addOrder('note', 'ASC');
$result = $this->NoteModel->load();
if (isError($result)) {
$this->terminateWithError(getError($result), self::ERROR_TYPE_GENERAL);
}
return $this->terminateWithSuccess(getData($result) ?: []);
}
}
@@ -97,6 +97,10 @@ class Config extends FHCAPI_Controller
'component' => './Stv/Studentenverwaltung/Details/Noten.js'
];
*/
$result['finalexam'] = [
'title' => $this->p->t('stv', 'tab_finalexam'),
'component' => './Stv/Studentenverwaltung/Details/Abschlusspruefung.js'
];
Events::trigger('stv_conf_student', function & () use (&$result) {
return $result;
@@ -113,4 +113,61 @@ class Abschlusspruefung_model extends DB_Model
return success($abschlusspruefungdata);
}
/**
* Gets data of an Abschlusspruefung
* @param $student_uid
* @return object
*/
public function getAbschlusspruefungForPrestudent($student_uid)
{
$qry = "
SELECT
exam.*,
CONCAT(
person_pruefer1.nachname || ' ',
person_pruefer1.vorname,
COALESCE(' ' || person_pruefer1.titelpre)
) AS person_pruefer1,
CONCAT(
person_pruefer2.nachname || ' ',
person_pruefer2.vorname,
COALESCE(' ' || person_pruefer2.titelpre)
) AS person_pruefer2,
CONCAT(
person_pruefer3.nachname || ' ',
person_pruefer3.vorname,
COALESCE(' ' || person_pruefer3.titelpre)
) AS person_pruefer3,
CONCAT(
person_vorsitzender.nachname || ' ',
person_vorsitzender.vorname,
COALESCE(' ' || person_vorsitzender.titelpre)
) AS person_vorsitzender,
TO_CHAR(datum::timestamp, 'DD.MM.YYYY') AS format_datum,
TO_CHAR(freigabedatum::timestamp, 'DD.MM.YYYY') AS format_freigabedatum,
TO_CHAR(sponsion::timestamp, 'DD.MM.YYYY') AS format_sponsion,
person_pruefer1.nachname as p1_nachname,
person_pruefer2.nachname as p2_nachname,
person_pruefer3.nachname as p3_nachname,
person_vorsitzender.nachname as vorsitz_nachname,
beurteilung.bezeichnung as beurteilung_bezeichnung
FROM
lehre.tbl_abschlusspruefung exam
JOIN lehre.tbl_pruefungstyp USING (pruefungstyp_kurzbz)
JOIN public.tbl_benutzer ben_vorsitzender ON (ben_vorsitzender.uid = vorsitz)
JOIN public.tbl_person person_vorsitzender ON (ben_vorsitzender.person_id = person_vorsitzender.person_id)
JOIN public.tbl_person person_pruefer1 ON (person_pruefer1.person_id = pruefer1)
LEFT JOIN public.tbl_person person_pruefer2 ON (person_pruefer2.person_id = pruefer2)
LEFT JOIN public.tbl_person person_pruefer3 ON (person_pruefer3.person_id = pruefer3)
JOIN lehre.tbl_abschlussbeurteilung beurteilung USING (abschlussbeurteilung_kurzbz)
WHERE student_uid = ?
ORDER BY datum DESC
";
return $this->execQuery($qry, array('student_uid' => $student_uid));
}
}
@@ -0,0 +1,14 @@
<?php
class Akadgrad_model extends DB_Model
{
/**
* Constructor
*/
public function __construct()
{
parent::__construct();
$this->dbTable = 'lehre.tbl_akadgrad';
$this->pk = 'akadgrad_id';
}
}
@@ -0,0 +1,14 @@
<?php
class Note_model extends DB_Model
{
/**
* Constructor
*/
public function __construct()
{
parent::__construct();
$this->dbTable = 'lehre.tbl_note';
$this->pk = 'note';
}
}
@@ -0,0 +1,14 @@
<?php
class Pruefungsantritt_model extends DB_Model
{
/**
* Constructor
*/
public function __construct()
{
parent::__construct();
$this->dbTable = 'lehre.tbl_abschlusspruefung_antritt';
$this->pk = 'pruefungsantritt_kurzbz';
}
}
@@ -217,12 +217,28 @@ class Mitarbeiter_model extends DB_Model
return success($kurzbz);
}
public function searchMitarbeiter($filter)
/**
* Search function for mitarbeiter
* @param $filter searchstring: searches for nachname, vorname, mitarbeiter_uid
* $param $mode gives the resultobject in different version:
* null : "[mitarbeiter_uid], Nachname, Vorname, (mitarbeiter_uid)"
* 'mitAkadGrad': "[mitarbeiter_uid], Nachname, Vorname, Titelpre, Titelpost (mitarbeiter_uid)"
* 'ohneMaUid' : "[mitarbeiter_uid], Nachname, Vorname, Titelpre, Titelpost"
* @return object in 3 versions
*/
public function searchMitarbeiter($filter, $mode=null)
{
$filter = strtoLower($filter);
if ($mode == "mitAkadGrad")
$returnwert = "ma.mitarbeiter_uid, CONCAT(p.nachname, ' ', p.vorname, ' ', p.titelpost, ' ', p.titelpre, ' (', ma.mitarbeiter_uid , ')') as mitarbeiter";
elseif ($mode == "ohneMaUid")
$returnwert = "ma.mitarbeiter_uid, CONCAT(p.nachname, ' ', p.vorname, ' ', p.titelpost, ' ', p.titelpre) as mitarbeiter";
else
$returnwert = "ma.mitarbeiter_uid, CONCAT(p.nachname, ' ', p.vorname, ' (', ma.mitarbeiter_uid , ')') as mitarbeiter";
$qry = "
SELECT
ma.mitarbeiter_uid, CONCAT(p.nachname, ' ', p.vorname, ' (', ma.mitarbeiter_uid , ')') as mitarbeiter
SELECT " . $returnwert . "
FROM
public.tbl_mitarbeiter ma
JOIN
+2
View File
@@ -2,12 +2,14 @@ import verband from './stv/verband.js';
import students from './stv/students.js';
import filter from './stv/filter.js';
import konto from './stv/konto.js';
import abschlusspruefung from './stv/abschlusspruefung.js';
export default {
verband,
students,
filter,
konto,
abschlusspruefung,
configStudent() {
return this.$fhcApi.get('api/frontend/v1/stv/config/student');
},
+46
View File
@@ -0,0 +1,46 @@
export default {
getAbschlusspruefung (url, config, params){
return this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getAbschlusspruefung/' + params.id);
},
addNewAbschlusspruefung(id, data) {
return this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/addNewAbschlusspruefung/' + id,
data
);
},
loadAbschlusspruefung(id){
return this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/loadAbschlusspruefung/', {id});
},
updateAbschlusspruefung(id, data) {
return this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/updateAbschlusspruefung/' + id,
data
);
},
deleteAbschlusspruefung(id){
return this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/deleteAbschlusspruefung/', {id});
},
getTypenAbschlusspruefung(){
return this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getTypenAbschlusspruefung/');
},
getTypenAntritte(){
return this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getTypenAntritte/');
},
getBeurteilungen(){
return this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getBeurteilungen/');
},
getAkadGrade(studiengang_kz){
return this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/getAkadGrade/', {studiengang_kz});
},
getTypStudiengang(studiengang_kz){
return this.$fhcApi.post('api/frontend/v1/stv/abschlusspruefung/getTypStudiengang/', {studiengang_kz});
},
getMitarbeiter(searchString){
return this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getMitarbeiter/' + searchString);
},
getPruefer(searchString){
return this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getPruefer/' + searchString);
},
getNoten(){
return this.$fhcApi.get('api/frontend/v1/stv/abschlusspruefung/getNoten/');
},
}
@@ -0,0 +1,18 @@
import AbschlusspruefungList from "./Abschlusspruefung/AbschlusspruefungList.js";
export default {
components: {
AbschlusspruefungList
},
props: {
modelValue: Object
},
data(){
return {}
},
template: `
<div class="stv-details-abschlusspruefung h-100 d-flex flex-column">
<abschlusspruefung-list ref="finalexam" :student="modelValue"></abschlusspruefung-list>
</div>`
};
@@ -0,0 +1,528 @@
import {CoreFilterCmpt} from "../../../../filter/Filter.js";
import BsModal from "../../../../Bootstrap/Modal.js";
import FormForm from '../../../../Form/Form.js';
import FormInput from '../../../../Form/Input.js';
import PvAutoComplete from "../../../../../../../index.ci.php/public/js/components/primevue/autocomplete/autocomplete.esm.min.js";
export default {
components: {
CoreFilterCmpt,
BsModal,
FormForm,
FormInput,
PvAutoComplete
},
props: {
student: Object
},
data() {
return {
tabulatorOptions: {
ajaxURL: 'dummy',
ajaxRequestFunc: this.$fhcApi.factory.stv.abschlusspruefung.getAbschlusspruefung,
ajaxParams: () => {
return {
id: this.student.uid
};
},
ajaxResponse: (url, params, response) => response.data,
columns: [
{title: "vorsitz", field: "vorsitz_nachname"},
{title: "abschlussbeurteilung", field: "beurteilung_bezeichnung"},
{title: "prueferIn1", field: "p1_nachname", visible: false},
{title: "prueferIn2", field: "p2_nachname", visible: false},
{title: "prueferIn3", field: "p3_nachname", visible: false},
{title: "datum", field: "format_datum"},
{title: "uhrzeit", field: "uhrzeit"},
{title: "freigabe", field: "format_freigabedatum"},
{title: "pruefungsantritt", field: "pruefungsantritt_kurzbz"},
{title: "sponsion", field: "format_sponsion"},
{title: "anmerkung", field: "anmerkung"},
{title: "abschlusspruefung_id", field: "abschlusspruefung_id", visible: false},
{title: "typ", field: "pruefungstyp_kurzbz", visible: false},
{
title: 'Aktionen', field: 'actions',
minWidth: 150, // Ensures Action-buttons will be always fully displayed
formatter: (cell, formatterParams, onRendered) => {
let container = document.createElement('div');
container.className = "d-flex gap-2";
let button = document.createElement('button');
button.className = 'btn btn-outline-secondary btn-action';
button.innerHTML = '<i class="fa fa-edit"></i>';
button.title = this.$p.t('ui', 'bearbeiten');
button.addEventListener('click', (event) =>
this.actionEditAbschlusspruefung(cell.getData().abschlusspruefung_id)
);
container.append(button);
button = document.createElement('button');
button.className = 'btn btn-outline-secondary btn-action';
button.innerHTML = '<i class="fa fa-xmark"></i>';
button.title = this.$p.t('ui', 'delete');
button.addEventListener('click', () =>
this.actionDeleteAbschlusspruefung(cell.getData().abschlusspruefung_id)
);
container.append(button);
//TODO(Manu) umbau auf dropdown?
//Prüfungsprotokoll, -zeugnis, -urkunde jeweils Deutsch und English
button = document.createElement('button');
button.className = 'btn btn-outline-secondary btn-action';
button.innerHTML = '<i class="fa fa-print"></i>';
button.title = "Drucken";
button.addEventListener('click', () =>
this.actionPrintAbschlusspruefung(cell.getData().abschlusspruefung_id)
);
container.append(button);
return container;
},
frozen: true
},
],
layout: 'fitDataFill',
layoutColumnsOnNewData: false,
height: 'auto',
selectable: true,
index: 'abschlusspruefung_id',
persistenceID: 'stv-details-finalexam'
},
tabulatorEvents: [
{
/* event: 'tableBuilt',
handler: async() => {
await this.$p.loadCategory(['global','person']);
let cm = this.$refs.table.tabulator.columnManager;
cm.getColumnByField('name').component.updateDefinition({
title: this.$p.t('global', 'name')
});
cm.getColumnByField('typ').component.updateDefinition({
title: this.$p.t('global', 'typ')
});
cm.getColumnByField('anschrift').component.updateDefinition({
title: this.$p.t('person', 'anschrift')
});
cm.getColumnByField('kontonr').component.updateDefinition({
title: this.$p.t('person', 'kontonr')
});
cm.getColumnByField('blz').component.updateDefinition({
title: this.$p.t('person', 'blz')
});
cm.getColumnByField('verrechnung').component.updateDefinition({
title: this.$p.t('person', 'verrechnung')
});
cm.getColumnByField('person_id').component.updateDefinition({
title: this.$p.t('person', 'person_id')
});
cm.getColumnByField('abschlusspruefung_id').component.updateDefinition({
title: this.$p.t('ui', 'abschlusspruefung_id')
});*/
/* cm.getColumnByField('actions').component.updateDefinition({
title: this.$p.t('global', 'aktionen')
});*/
}
],
lastSelected: null,
formData: {
typStg: null,
pruefungstyp_kurzbz: null,
akadgrad_id: null
},
statusNew: true,
arrTypen: [],
arrAntritte: [],
arrBeurteilungen: [],
arrAkadGrad: [],
arrNoten: [],
filteredMitarbeiter: [],
filteredPruefer: [],
abortController: {
mitarbeiter: null,
pruefer: null
}
}
},
methods: {
actionNewAbschlusspruefung() {
this.resetForm();
this.statusNew = false;
},
actionEditAbschlusspruefung(abschlusspruefung_id) {
this.statusNew = false;
console.log("action edit: ", abschlusspruefung_id);
this.loadAbschlusspruefung(abschlusspruefung_id).then(() => {
if (this.formData.abschlusspruefung_id){
console.log("activate form?");
}
});
},
actionDeleteAbschlusspruefung(abschlusspruefung_id) {
this.$fhcAlert
.confirmDelete()
.then(result => result
? abschlusspruefung_id
: Promise.reject({handled: true}))
.then(this.deleteAbschlusspruefung)
.catch(this.$fhcAlert.handleSystemError);
},
addNewAbschlusspruefung(formData) {
this.formData.plz = this.formData.address.plz;
return this.$refs.formData.factory.stv.abschlusspruefung.addNewAbschlusspruefung(this.uid, this.formData)
.then(response => {
this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successSave'));
this.resetForm();
}).catch(this.$fhcAlert.handleSystemError)
.finally(() => {
//window.scrollTo(0, 0);
this.reload();
});
},
reload() {
this.$refs.table.reloadTable();
},
loadAbschlusspruefung(abschlusspruefung_id) {
this.statusNew = false;
return this.$fhcApi.factory.stv.abschlusspruefung.loadAbschlusspruefung(abschlusspruefung_id)
.then(result => {
this.formData = result.data;
return result;
})
.catch(this.$fhcAlert.handleSystemError);
},
updateAbschlusspruefung(abschlusspruefung_id) {
this.formData.plz = this.formData.address.plz;
return this.$refs.formData.factory.stv.abschlusspruefung.updateAbschlusspruefung(abschlusspruefung_id,
this.formData
).then(response => {
this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successSave'));
this.hideModal('adressModal');
this.resetForm();
}).catch(this.$fhcAlert.handleSystemError)
.finally(() => {
//window.scrollTo(0, 0);
this.reload();
});
},
deleteAbschlusspruefung(abschlusspruefung_id) {
return this.$fhcApi.factory.stv.abschlusspruefung.deleteAbschlusspruefung(abschlusspruefung_id)
.then(response => {
this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successDelete'));
}).catch(this.$fhcAlert.handleSystemError)
.finally(()=> {
window.scrollTo(0, 0);
this.reload();
});
},
resetForm() {
this.formData = {};
this.statusNew = true;
},
search(event) {
if (this.abortController.mitarbeiter) {
this.abortController.mitarbeiter.abort();
}
this.abortController.mitarbeiter = new AbortController();
return this.$refs.formData.factory.stv.abschlusspruefung.getMitarbeiter(event.query)
.then(result => {
this.filteredMitarbeiter = result.data.retval;
});
},
searchNotAkad(event) {
if (this.abortController.pruefer) {
this.abortController.pruefer.abort();
}
this.abortController.pruefer = new AbortController();
return this.$refs.formData.factory.stv.abschlusspruefung.getPruefer(event.query)
.then(result => {
this.filteredPruefer = result.data.retval;
});
},
setDefaultFormData(){
//TODO(Manu) check why phrasen not working
//check lg: if no prüfungsnotizen
if (this.formData.typStg === 'b')
{
this.formData.pruefungstyp_kurzbz = 'Bachelor';
this.formData.protokoll = this.$p.t('abschlusspruefung', 'pruefungsnotizenBachelor');
this.formData.protokoll = this.$p.t('ui', 'pruefungsnotizenMaster');
}
if (this.formData.typStg === 'd'){
this.formData.pruefungstyp_kurzbz = 'Diplom';
this.formData.protokoll = this.$p.t('abschlusspruefung', 'pruefungsnotizenBachelor');
}
if (this.formData.typStg === 'lg')
{
this.formData.pruefungstyp_kurzbz = 'lgabschluss';
}
// else
// console.log("no Typ??");
if (!this.formData.akadgrad_id && this.arrAkadGrad.length > 0) {
console.log("in here");
this.formData.akadgrad_id = this.arrAkadGrad[0].akadgrad_id;
}
}
},
created() {
this.$fhcApi.factory.stv.abschlusspruefung.getTypenAbschlusspruefung()
.then(result => {
this.arrTypen = result.data;
})
.catch(this.$fhcAlert.handleSystemError);
this.$fhcApi.factory.stv.abschlusspruefung.getTypenAntritte()
.then(result => {
this.arrAntritte = result.data;
})
.catch(this.$fhcAlert.handleSystemError);
this.$fhcApi.factory.stv.abschlusspruefung.getBeurteilungen()
.then(result => {
this.arrBeurteilungen = result.data;
})
.catch(this.$fhcAlert.handleSystemError);
this.$fhcApi.factory.stv.abschlusspruefung.getNoten()
.then(result => {
this.arrNoten = result.data;
})
.catch(this.$fhcAlert.handleSystemError);
this.$fhcApi.factory.stv.abschlusspruefung.getAkadGrade(this.student.studiengang_kz)
.then(result => {
this.arrAkadGrad = result.data;
})
.catch(this.$fhcAlert.handleSystemError);
this.$fhcApi.factory.stv.abschlusspruefung.getTypStudiengang(this.student.studiengang_kz)
.then(result => {
this.formData.typStg = result.data;
this.setDefaultFormData();
})
.catch(this.$fhcAlert.handleSystemError);
},
template: `
<div class="stv-details-abschlusspruefung h-100 pb-3">
<h1>{{this.$p.t('stv','tab_finalexam')}} </h1>
<!-- {{typStg}}
<hr>
{{formData}}
{{arrAkadGrad}}-->
<core-filter-cmpt
ref="table"
:tabulator-options="tabulatorOptions"
:tabulator-events="tabulatorEvents"
table-only
:side-menu="false"
reload
new-btn-show
:new-btn-label="this.$p.t('stv', 'tab_finalexam')"
@click:new="actionNewAbschlusspruefung"
>
</core-filter-cmpt>
<form-form ref="formData">
<legend>{{this.$p.t('global','details')}}</legend>
<div class="row mb-3">
<form-input
container-class="col-6 stv-details-abschlusspruefung-typ"
:label="$p.t('global', 'typ')"
type="select"
v-model="formData.pruefungstyp_kurzbz"
name="pruefungstyp_kurzbz"
>
<option
v-for="typ in arrTypen"
:key="typ.pruefungstyp_kurzbz"
:value="typ.pruefungstyp_kurzbz"
>
{{typ.beschreibung}}
</option>
</form-input>
<form-input
container-class="col-6 stv-details-abschlusspruefung-note"
:label="$p.t('lehre', 'note')"
type="select"
v-model="formData.note"
name="note"
>
<option
v-for="note in arrNoten"
:key="note.note"
:value="note.note"
>
{{note.bezeichnung}}
</option>
</form-input>
</div>
<div class="row mb-3">
<form-input
container-class="col-6 stv-details-abschlusspruefung-pruefungsantritt"
label="Prüfungsantritt"
type="select"
v-model="formData.pruefungsantritt_kurzbz"
name="pruefungsantritt_kurzbz"
>
<option :value="null">-- {{$p.t('fehlermonitoring', 'keineAuswahl')}} --</option>
<option
v-for="antritt in arrAntritte"
:key="antritt.pruefungsantritt_kurzbz"
:value="antritt.pruefungsantritt_kurzbz"
>
{{antritt.bezeichnung}}
</option>
</form-input>
</div>
<div class="row mb-3">
<form-input
container-class="col-6 stv-details-abschlusspruefung-vorsitz"
label="Vorsitz"
type="autocomplete"
optionLabel="mitarbeiter"
v-model="formData.vorsitz"
name="vorsitz"
:suggestions="filteredMitarbeiter"
@complete="search"
:min-length="3"
>
</form-input>
<form-input
container-class="col-6 stv-details-abschlusspruefung-pruefer1"
label="Prüferin1"
type="autocomplete"
optionLabel="mitarbeiter"
v-model="formData.pruefer1"
name="pruefer1"
:suggestions="filteredPruefer"
@complete="searchNotAkad"
:min-length="3"
>
</form-input>
</div>
<div class="row mb-3">
<!--TODO(Manu) bezeichnung_english, filter auf aktive? -->
<form-input
container-class="col-6 stv-details-abschlusspruefung-abschlussbeurteilung_kurzbz"
label="Abschlussbeurteilung"
type="select"
v-model="formData.abschlussbeurteilung_kurzbz"
name="abschlussbeurteilung_kurzbz"
>
<option
v-for="beurteilung in arrBeurteilungen"
:key="beurteilung.abschlussbeurteilung_kurzbz"
:value="beurteilung.abschlussbeurteilung_kurzbz"
>
{{beurteilung.bezeichnung}}
</option>
</form-input>
<form-input
container-class="col-6 stv-details-abschlusspruefung-pruefer2"
label="Prüferin2"
type="autocomplete"
optionLabel="mitarbeiter"
v-model="formData.pruefer2"
name="pruefer2"
:suggestions="filteredPruefer"
@complete="searchNotAkad"
:min-length="3"
>
</form-input>
</div>
<div class="row mb-3">
<form-input
container-class="col-6 stv-details-abschlusspruefung-akadgrad"
label="Akademischer Grad"
type="select"
v-model="formData.akadgrad_id"
name="akadgrad"
>
<option
v-for="grad in arrAkadGrad"
:key="grad.akadgrad_id"
:value="grad.akadgrad_id"
>
{{grad.titel}}
</option>
</form-input>
<form-input
container-class="col-6 stv-details-abschlusspruefung-pruefer3"
label="Prüferin3"
type="autocomplete"
optionLabel="mitarbeiter"
v-model="formData.pruefer3"
name="pruefer3"
:suggestions="filteredPruefer"
@complete="searchNotAkad"
:min-length="3"
>
</form-input>
</div>
<div class="row mb-3">
<form-input
container-class="col-6 stv-details-abschlusspruefung-datum"
label="Datum"
type="DatePicker"
v-model="formData.datum"
auto-apply
:enable-time-picker="false"
format="dd.MM.yyyy"
name="datum"
:teleport="true"
>
</form-input>
<form-input
container-class="col-6 stv-details-abschlusspruefung-anmerkung"
label="Anmerkung"
type="textarea"
v-model="formData.anmerkung"
name="anmerkung"
>
</form-input>
</div>
<div class="row mb-3">
<form-input
container-class="col-6 stv-details-abschlusspruefung-sponsion"
label="Sponsion"
type="DatePicker"
v-model="formData.sponsion"
auto-apply
:enable-time-picker="false"
format="dd.MM.yyyy"
name="sponsion"
:teleport="true"
>
</form-input>
<form-input
container-class="col-6 stv-details-abschlusspruefung-protokoll"
label="Protokoll"
type="textarea"
v-model="formData.protokoll"
name="protokoll"
:rows= 10
>
</form-input>
</div>
<div>
<button v-if="statusNew" class="btn btn-primary" @click="addNewAbschlusspruefung()"> {{$p.t('ui', 'speichern')}}</button>
<button v-else class="btn btn-primary" @click="updateAbschlusspruefung(formData.abschlusspruefung_id)"> {{$p.t('ui', 'speichern')}}</button>
</div>
</form-form>
</div>
`}
+65 -1
View File
@@ -9031,6 +9031,50 @@ Question(s) to open the examination interview
Reasons for failing OR any possible explanatory notes on a passing grade
<< Please fill out >>
Any unusual occurrences
<< Please fill out >>',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'ui',
'phrase' => 'pruefungsnotizenBachelor2',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Prüfungsteil/e in Englisch (Optional - entsprechend der Vorgabe des Studiengangs):
<< Nichtzutreffendes löschen >>
* Präsentation der Bachelorarbeit
* Prüfungsgespräch über die Bachelorarbeit
Fragen zur Eröffnung des Prüfungsgesprächs
<< Bitte ausfüllen >>
Gründe für negative Beurteilung ODER allfällige Anmerkungen bei positiver Beurteilung
<< Bitte ausfüllen >>
Allfällige besondere Vorkommnisse
<< Bitte ausfüllen >>',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Parts of the examination held in English (Optional - in line with the degree program\'s guidelines):
<< Delete as appropriate >>
* Presentation of the Bachelor Paper
* Examination interview on the Bachelor Paper
Question(s) to open the examination interview
<< Please fill out >>
Reasons for failing OR any possible explanatory notes on a passing grade
<< Please fill out >>
Any unusual occurrences
<< Please fill out >>',
'description' => '',
@@ -31165,7 +31209,27 @@ array(
'insertvon' => 'system'
)
)
)
),
array(
'app' => 'core',
'category' => 'stv',
'phrase' => 'tab_finalexam',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Abschlussprüfung',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Final exam',
'description' => '',
'insertvon' => 'system'
)
)
),
);