mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-07-19 16:02:15 +00:00
Start tab Abschlusspruefung, Table and Form with Dropdowns and default data
This commit is contained in:
@@ -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,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');
|
||||
},
|
||||
|
||||
@@ -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>`
|
||||
};
|
||||
+528
@@ -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>
|
||||
|
||||
|
||||
|
||||
`}
|
||||
@@ -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'
|
||||
)
|
||||
)
|
||||
),
|
||||
|
||||
);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user