new Tab GemeinsameStudien

This commit is contained in:
ma0068
2025-04-09 11:06:50 +02:00
parent 97782b7f1d
commit 419c199e84
8 changed files with 963 additions and 1 deletions
@@ -128,6 +128,11 @@ class Config extends FHCAPI_Controller
'component' => './Stv/Studentenverwaltung/Details/Mobility.js'
];
$result['jointstudies'] = [
'title' => $this->p->t('stv', 'tab_jointstudies'),
'component' => './Stv/Studentenverwaltung/Details/JointStudies.js'
];
Events::trigger('stv_conf_student', function & () use (&$result) {
return $result;
});
@@ -0,0 +1,283 @@
<?php
if (! defined('BASEPATH')) exit('No direct script access allowed');
use \DateTime as DateTime;
class GemeinsameStudien extends FHCAPI_Controller
{
public function __construct()
{
parent::__construct([
'getStudien' => ['admin:r', 'assistenz:r'],
'loadStudie' => ['admin:r', 'assistenz:r'],
'insertStudie' => ['admin:rw', 'assistenz:rw'],
'updateStudie' => ['admin:rw', 'assistenz:rw'],
'deleteStudie' => ['admin:rw', 'assistenz:rw'],
'getProgramsStudien' => ['admin:r', 'assistenz:r'],
'getTypenMobility' => ['admin:r', 'assistenz:r'],
'getStudiensemester' => ['admin:r', 'assistenz:r'],
'getStudienprogramme' => ['admin:r', 'assistenz:r'],
'getPartnerfirmen' => ['admin:r', 'assistenz:r'],
'getStatiPrestudent' => ['admin:r', 'assistenz:r'],
]);
// Load Libraries
$this->load->library('VariableLib', ['uid' => getAuthUID()]);
$this->load->library('form_validation');
// Load language phrases
$this->loadPhrases([
'ui',
'jointstudies'
]);
// Load models
$this->load->model('codex/Mobilitaet_model', 'MobilitaetModel');
//TODO(check if additional Permissions necessary): 'student/stammdaten'
}
public function getStudien($prestudent_id)
{
$this->MobilitaetModel->addSelect('mobilitaet_id');
$this->MobilitaetModel->addSelect('mobilitaetstyp_kurzbz');
$this->MobilitaetModel->addSelect('prestudent_id');
$this->MobilitaetModel->addSelect('studiensemester_kurzbz');
$this->MobilitaetModel->addSelect('bis.tbl_mobilitaet.mobilitaetsprogramm_code');
$this->MobilitaetModel->addSelect('bis.tbl_mobilitaet.gsprogramm_id');
$this->MobilitaetModel->addSelect('bis.tbl_mobilitaet.firma_id');
$this->MobilitaetModel->addSelect('status_kurzbz');
$this->MobilitaetModel->addSelect('ausbildungssemester');
$this->MobilitaetModel->addSelect('bis.tbl_mobilitaet.insertvon');
$this->MobilitaetModel->addSelect('bis.tbl_mobilitaet.insertamum');
$this->MobilitaetModel->addSelect('bis.tbl_mobilitaet.updatevon');
$this->MobilitaetModel->addSelect('bis.tbl_mobilitaet.updateamum');
$this->MobilitaetModel->addSelect('mp.kurzbz');
$this->MobilitaetModel->addSelect('gp.gsprogrammtyp_kurzbz');
$this->MobilitaetModel->addSelect('gp.bezeichnung as studienprogramm');
$this->MobilitaetModel->addSelect('f.name as partner');
$this->MobilitaetModel->addJoin('bis.tbl_mobilitaetsprogramm mp', 'ON (mp.mobilitaetsprogramm_code = bis.tbl_mobilitaet.mobilitaetsprogramm_code)', 'LEFT');
$this->MobilitaetModel->addJoin('bis.tbl_gsprogramm gp', 'ON (gp.gsprogramm_id = bis.tbl_mobilitaet.gsprogramm_id)', 'LEFT');
$this->MobilitaetModel->addJoin('public.tbl_firma f', 'ON (f.firma_id = bis.tbl_mobilitaet.firma_id)', 'LEFT');
$result = $this->MobilitaetModel->loadWhere([
'prestudent_id' => $prestudent_id,
]);
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess($data);
}
public function getTypenMobility()
{
$this->load->model('codex/Mobilitaetstyp_model', 'MobilitaetstypModel');
$result = $this->MobilitaetstypModel->load();
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess($data);
}
public function getStudiensemester()
{
$this->load->model('organisation/Studiensemester_model', 'StudiensemesterModel');
$this->StudiensemesterModel->addOrder('studienjahr_kurzbz', 'DESC');
$result = $this->StudiensemesterModel->load();
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess($data);
}
public function getStudienprogramme()
{
$this->load->model('codex/Gsprogramm_model', 'GsprogrammModel');
$result = $this->GsprogrammModel->load();
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess($data);
}
public function getPartnerfirmen()
{
$this->load->model('ressource/Firma_model', 'FirmaModel');
$result = $this->FirmaModel->loadWhere(
['partner_code !=' => null]
);
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess($data);
}
public function getStatiPrestudent()
{
$this->load->model('crm/Status_model', 'StatusModel');
$result = $this->StatusModel->load();
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess($data);
}
public function loadStudie($mobilitaet_id)
{
$result = $this->MobilitaetModel->load($mobilitaet_id);
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess(current($data));
}
public function insertStudie()
{
$this->load->library('form_validation');
$authUID = getAuthUID();
$prestudent_id = $this->input->post('prestudent_id');
if(!$prestudent_id)
{
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Prestudent ID']), self::ERROR_TYPE_GENERAL);
}
$formData = $this->input->post('formData');
$_POST['ausbildungssemester'] = (isset($formData['ausbildungssemester']) && !empty($formData['ausbildungssemester']))
? $formData['ausbildungssemester']
: null;
$_POST['mobilitaetstyp_kurzbz'] = (isset($formData['mobilitaetstyp_kurzbz']) && !empty($formData['mobilitaetstyp_kurzbz']))
? $formData['mobilitaetstyp_kurzbz']
: null;
$_POST['studiensemester_kurzbz'] = (isset($formData['studiensemester_kurzbz']) && !empty($formData['studiensemester_kurzbz']))
? $formData['studiensemester_kurzbz'] : null;
$this->form_validation->set_rules('mobilitaetstyp_kurzbz', 'Typ', 'required', [
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Typ'])
]);
$this->form_validation->set_rules('studiensemester_kurzbz', 'Studiensemester', 'required', [
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Studiensemester'])
]);
$this->form_validation->set_rules('ausbildungssemester', 'Ausbildungssemester', 'required|numeric', [
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Ausbildungssemester']),
'numeric' => $this->p->t('ui', 'error_fieldNotNumeric', ['field' => 'Ausbildungssemester']),
]);
if ($this->form_validation->run() == false)
{
$this->terminateWithValidationErrors($this->form_validation->error_array());
}
$status_kurzbz = (isset($formData['status_kurzbz']) && !empty($formData['status_kurzbz']))
? $formData['status_kurzbz']
: null;
$mobilitaetsprogramm_code = (isset($formData['mobilitaetsprogramm_code']) && !empty($formData['mobilitaetsprogramm_code']))
? $formData['mobilitaetsprogramm_code']
: null;
$gsprogramm_id = (isset($formData['gsprogramm_id']) && !empty($formData['gsprogramm_id']))
? $formData['gsprogramm_id']
: null;
$firma_id= (isset($formData['firma_id']) && !empty($formData['firma_id'])) ? $formData['firma_id'] : null;
$result = $this->MobilitaetModel->insert([
'prestudent_id' => $prestudent_id,
'mobilitaetstyp_kurzbz' => $_POST['mobilitaetstyp_kurzbz'],
'status_kurzbz' => $status_kurzbz,
'studiensemester_kurzbz' => $_POST['studiensemester_kurzbz'],
'mobilitaetsprogramm_code' => $mobilitaetsprogramm_code,
'gsprogramm_id' => $gsprogramm_id,
'firma_id' => $firma_id,
'ausbildungssemester' => $_POST['ausbildungssemester'],
'insertvon' => $authUID,
'insertamum' => date('c'),
]);
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess($data);
}
public function updateStudie()
{
$this->load->library('form_validation');
$authUID = getAuthUID();
$prestudent_id = $this->input->post('prestudent_id');
if(!$prestudent_id)
{
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Prestudent ID']), self::ERROR_TYPE_GENERAL);
}
$formData = $this->input->post('formData');
$_POST['mobilitaet_id'] = (isset($formData['mobilitaet_id']) && !empty($formData['mobilitaet_id']))
? $formData['mobilitaet_id'] :
$this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Mobilitaet ID']), self::ERROR_TYPE_GENERAL);
$_POST['ausbildungssemester'] = (isset($formData['ausbildungssemester']) && !empty($formData['ausbildungssemester']))
? $formData['ausbildungssemester']
: null;
$_POST['mobilitaetstyp_kurzbz'] = (isset($formData['mobilitaetstyp_kurzbz']) && !empty($formData['mobilitaetstyp_kurzbz']))
? $formData['mobilitaetstyp_kurzbz']
: null;
$_POST['studiensemester_kurzbz'] = (isset($formData['studiensemester_kurzbz']) && !empty($formData['studiensemester_kurzbz']))
? $formData['studiensemester_kurzbz']
: null;
$this->form_validation->set_rules('mobilitaetstyp_kurzbz', 'Typ', 'required', [
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Typ'])
]);
$this->form_validation->set_rules('studiensemester_kurzbz', 'Studiensemester', 'required', [
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Studiensemester'])
]);
$this->form_validation->set_rules('ausbildungssemester', 'Ausbildungssemester', 'required|numeric', [
'required' => $this->p->t('ui', 'error_fieldRequired', ['field' => 'Ausbildungssemester']),
'numeric' => $this->p->t('ui', 'error_fieldNotNumeric', ['field' => 'Ausbildungssemester']),
]);
if ($this->form_validation->run() == false)
{
$this->terminateWithValidationErrors($this->form_validation->error_array());
}
$status_kurzbz = (isset($formData['status_kurzbz']) && !empty($formData['status_kurzbz'])) ? $formData['status_kurzbz'] : null;
$mobilitaetsprogramm_code = (isset($formData['mobilitaetsprogramm_code']) && !empty($formData['mobilitaetsprogramm_code']))
? $formData['mobilitaetsprogramm_code']
: null;
$gsprogramm_id = (isset($formData['gsprogramm_id']) && !empty($formData['gsprogramm_id']))
? $formData['gsprogramm_id']
: null;
$firma_id= (isset($formData['firma_id']) && !empty($formData['firma_id'])) ? $formData['firma_id'] : null;
$result = $this->MobilitaetModel->update(
[
'mobilitaet_id' => $_POST['mobilitaet_id'],
],
[
'prestudent_id' => $prestudent_id,
'mobilitaetstyp_kurzbz' => $_POST['mobilitaetstyp_kurzbz'],
'status_kurzbz' => $status_kurzbz,
'studiensemester_kurzbz' => $_POST['studiensemester_kurzbz'],
'mobilitaetsprogramm_code' => $mobilitaetsprogramm_code,
'gsprogramm_id' => $gsprogramm_id,
'firma_id' => $firma_id,
'ausbildungssemester' => $_POST['ausbildungssemester'],
'updatevon' => $authUID,
'updateamum' => date('c'),
]
);
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess($data);
}
public function deleteStudie($mobilitaet_id)
{
if(!$mobilitaet_id)
{
return $this->terminateWithError($this->p->t('ui', 'error_missingId', ['id'=> 'Mobilität ID']), self::ERROR_TYPE_GENERAL);
}
$result = $this->MobilitaetModel->delete(
array('mobilitaet_id' => $mobilitaet_id)
);
$data = $this->getDataOrTerminateWithError($result);
$this->terminateWithSuccess($data);
}
}
@@ -0,0 +1,14 @@
<?php
class Mobilitaetstyp_model extends DB_Model
{
/**
* Constructor
*/
public function __construct()
{
parent::__construct();
$this->dbTable = 'bis.tbl_mobilitaetstyp';
$this->pk = 'mobilitaetstyp_kurzbz';
}
}
+2
View File
@@ -10,6 +10,7 @@ import exam from './stv/exam.js';
import abschlusspruefung from './stv/abschlusspruefung.js';
import grades from './stv/grades.js';
import mobility from './stv/mobility.js';
import jointstudies from "./stv/jointstudies.js";
export default {
verband,
@@ -24,6 +25,7 @@ export default {
abschlusspruefung,
grades,
mobility,
jointstudies,
configStudent() {
return this.$fhcApi.get('api/frontend/v1/stv/config/student');
},
+33
View File
@@ -0,0 +1,33 @@
export default {
getStudies(url, config, params) {
return this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStudien/' + params.id);
},
getTypenMobility(){
return this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getTypenMobility/');
},
getStudiensemester(){
return this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStudiensemester/');
},
getStudyprograms(){
return this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStudienprogramme/');
},
getListPartner(){
return this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getPartnerfirmen/');
},
getStatiPrestudent(){
return this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/getStatiPrestudent/');
},
loadStudy(id){
return this.$fhcApi.get('api/frontend/v1/stv/GemeinsameStudien/loadStudie/' + id);
},
insertStudy(form, data){
return this.$fhcApi.post(form,'api/frontend/v1/stv/GemeinsameStudien/insertStudie/', data);
},
updateStudy(form, data){
return this.$fhcApi.post(form,'api/frontend/v1/stv/GemeinsameStudien/updateStudie/', data);
},
deleteStudy(id){
return this.$fhcApi.post('api/frontend/v1/stv/GemeinsameStudien/deleteStudie/' + id);
},
}
@@ -0,0 +1,16 @@
import TblJointStudies from "./JointStudies/JointStudies.js";
export default {
name: 'Tab_JointStudies',
components: {
TblJointStudies
},
props: {
modelValue: Object,
},
template: `
<div class="stv-details-jointstudies h-100">
<tbl-joint-studies :student="modelValue"></tbl-joint-studies>
</div>
`
}
@@ -0,0 +1,467 @@
import {CoreFilterCmpt} from "../../../../filter/Filter.js";
import BsModal from "../../../../Bootstrap/Modal.js";
import FormForm from "../../../../Form/Form.js";
import FormInput from "../../../../Form/Input.js";
export default {
name: 'Tbl_JointStudies',
components: {
CoreFilterCmpt,
BsModal,
FormForm,
FormInput,
},
inject: {
currentSemester: {
from: 'currentSemester',
},
},
props: {
student: Object
},
data(){
return {
tabulatorOptions: {
ajaxURL: 'dummy',
ajaxRequestFunc: this.$fhcApi.factory.stv.jointstudies.getStudies,
ajaxParams: () => {
return {
id: this.student.prestudent_id
};
},
ajaxResponse: (url, params, response) => response.data,
columns: [
{title: "mobilitaet_id", field: "mobilitaet_id", visible: false},
{title: "StSem", field: "studiensemester_kurzbz"},
// {title: "mobilitaetstyp_kurzbz", field: "mobilitaetstyp_kurzbz"},
{title: "kurzbz", field: "kurzbz"},
{title: "prestudent_id", field: "prestudent_id", visible: false},
{title: "Status", field: "status_kurzbz"},
{title: "Partner", field: "partner", visible: false},
{title: "Sem", field: "ausbildungssemester"},
{title: "gsprogrammtyp_kurzbz", field: "gsprogrammtyp_kurzbz"},
{title: "studienprogramm", field: "studienprogramm", visible: false},
{title: "insertvon", field: "insertvon", visible: false},
{
title: "insertamum", field: "insertamum",
formatter: function (cell) {
const dateStr = cell.getValue();
if (!dateStr) return "";
const date = new Date(dateStr);
return date.toLocaleString("de-DE", {
day: "2-digit",
month: "2-digit",
year: "numeric",
});
},
visible: false
},
{title: "updatevon", field: "updatevon", visible: false},
{
title: "updateamum", field: "updateamum",
formatter: function (cell) {
const dateStr = cell.getValue();
if (!dateStr) return "";
const date = new Date(dateStr);
return date.toLocaleString("de-DE", {
day: "2-digit",
month: "2-digit",
year: "numeric",
});
},
visible: false
},
{
title: 'Aktionen',
field: 'actions',
minWidth: 150,
maxWidth: 150,
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-copy"></i>';
button.title = this.$p.t('exam', 'newFromOld_studies');
button.addEventListener(
'click',
(event) =>
this.actionNewFromOldJointStudy(cell.getData().mobilitaet_id)
);
container.append(button);
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('exam', 'edit_studies');
button.addEventListener(
'click',
(event) =>
this.actionEditJointStudy(cell.getData().mobilitaet_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('exam', 'delete_studies');
button.addEventListener(
'click',
() =>
this.actionDeleteJointStudy(cell.getData().mobilitaet_id)
);
container.append(button);
return container;
},
frozen: true
},
],
},
tabulatorEvents: [
{
event: 'tableBuilt',
handler: async() => {
await this.$p.loadCategory(['global', 'jointstudies', 'ui', 'lehre', 'mobility']);
let cm = this.$refs.table.tabulator.columnManager;
cm.getColumnByField('mobilitaet_id').component.updateDefinition({
title: this.$p.t('global', 'mobilitaet_id')
});
/* cm.getColumnByField('studiensemester_kurzbz').component.updateDefinition({
title: this.$p.t('lehre', 'studiensemester')
});*/
cm.getColumnByField('gsprogrammtyp_kurzbz').component.updateDefinition({
title: this.$p.t('global', 'typ')
});
/* cm.getColumnByField('ausbildungssemester').component.updateDefinition({
title: this.$p.t('lehre', 'semester')
});*/
cm.getColumnByField('prestudent_id').component.updateDefinition({
title: this.$p.t('global', 'prestudentID')
});
cm.getColumnByField('kurzbz').component.updateDefinition({
title: this.$p.t('mobility', 'mobilitaetsprogramm')
});
cm.getColumnByField('studienprogramm').component.updateDefinition({
title: this.$p.t('jointstudies', 'studienprogramm')
});
cm.getColumnByField('insertamum').component.updateDefinition({
title: this.$p.t('global', 'insertamum')
});
cm.getColumnByField('insertvon').component.updateDefinition({
title: this.$p.t('global', 'insertvon')
});
cm.getColumnByField('updateamum').component.updateDefinition({
title: this.$p.t('global', 'updateamum')
});
cm.getColumnByField('updatevon').component.updateDefinition({
title: this.$p.t('global', 'updatevon')
});
/* cm.getColumnByField('actions').component.updateDefinition({
title: this.$p.t('global', 'aktionen')
});*/
}
}
],
formData: {
mobilitaetstyp_kurzbz: "GS",
studiensemester_kurzbz: this.currentSemester,
status_kurzbz: 'Student',
mobilitaet_id: null
},
statusNew: true,
listTypenMobility: [],
listStudiensemester: [],
programsMobility: [],
listStudienprogramme: [],
listPartner: [],
statiPrestudent: [],
}
},
methods: {
actionDeleteJointStudy(mobilitaet_id) {
this.$fhcAlert
.confirmDelete()
.then(result => result
? mobilitaet_id
: Promise.reject({handled: true}))
.then(this.deleteJointStudy)
.catch(this.$fhcAlert.handleSystemError);
},
actionEditJointStudy(mobilitaet_id) {
this.resetForm();
this.statusNew = false;
this.loadJointStudy(mobilitaet_id);
this.$refs.jointstudyModal.show();
},
actionNewFromOldJointStudy(mobilitaet_id) {
this.resetForm();
this.loadJointStudy(mobilitaet_id);
this.statusNew = true;
this.$refs.jointstudyModal.show();
},
actionNewJointStudy() {
this.resetForm();
this.statusNew = true;
this.$refs.jointstudyModal.show();
},
addNewJointStudy() {
const data = {
prestudent_id: this.student.prestudent_id,
formData: this.formData
};
return this.$fhcApi.factory.stv.jointstudies.insertStudy(this.$refs.formJointStudies, data)
.then(response => {
this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successSave'));
this.hideModal("jointstudyModal");
this.resetForm();
})
.catch(this.$fhcAlert.handleSystemError)
.finally(() => {
this.reload();
});
},
updateJointStudy() {
const data = {
prestudent_id: this.student.prestudent_id,
formData: this.formData
};
return this.$fhcApi.factory.stv.jointstudies.updateStudy(this.$refs.formJointStudies, data)
.then(response => {
this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successSave'));
this.hideModal("jointstudyModal");
this.resetForm();
})
.catch(this.$fhcAlert.handleSystemError)
.finally(() => {
this.reload();
});
},
loadJointStudy(mobilitaet_id) {
return this.$fhcApi.factory.stv.jointstudies.loadStudy(mobilitaet_id)
.then(result => {
this.formData = result.data;
})
.catch(this.$fhcAlert.handleSystemError);
},
deleteJointStudy(mobilitaet_id) {
return this.$fhcApi.factory.stv.jointstudies.deleteStudy(mobilitaet_id)
.then(response => {
this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successDelete'));
})
.catch(this.$fhcAlert.handleSystemError)
.finally(() => {
this.reload();
});
},
hideModal(modalRef){
this.$refs[modalRef].hide();
},
reload() {
this.$refs.table.reloadTable();
},
resetForm() {
this.formData = {};
this.formData.mobilitaetstyp_kurzbz = "GS";
this.formData.status_kurzbz = 'Student';
this.formData.studiensemester_kurzbz = this.currentSemester;
this.formData.prestudent_id = this.student.prestudent_id;
}
},
created(){
this.$fhcApi.factory.stv.jointstudies.getTypenMobility()
.then(result => {
this.listTypenMobility = result.data;
})
.catch(this.$fhcAlert.handleSystemError);
this.$fhcApi.factory.stv.jointstudies.getStudiensemester()
.then(result => {
this.listStudiensemester = result.data;
})
.catch(this.$fhcAlert.handleSystemError);
this.$fhcApi.factory.stv.mobility.getProgramsMobility()
.then(result => {
this.programsMobility = result.data;
})
.catch(this.$fhcAlert.handleSystemError);
this.$fhcApi.factory.stv.jointstudies.getStudyprograms()
.then(result => {
this.listStudienprogramme = result.data;
})
.catch(this.$fhcAlert.handleSystemError);
this.$fhcApi.factory.stv.jointstudies.getListPartner()
.then(result => {
this.listPartner = result.data;
})
.catch(this.$fhcAlert.handleSystemError);
this.$fhcApi.factory.stv.jointstudies.getStatiPrestudent()
.then(result => {
this.statiPrestudent = result.data;
})
.catch(this.$fhcAlert.handleSystemError);
},
template: `
<div class="stv-details-jointstudies-table h-100 pb-3">
<h4>{{$p.t('jointstudies', 'gemeinsameStudien')}}</h4>
<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('jointstudies', 'gemeinsamesStudium')"
@click:new="actionNewJointStudy"
>
</core-filter-cmpt>
<!--Modal: jointstudyModal-->
<bs-modal ref="jointstudyModal" dialog-class="modal-dialog-scrollable">
<template #title>
<p v-if="statusNew" class="fw-bold mt-3">{{$p.t('jointstudies', 'neuAnlegen')}}</p>
<p v-else class="fw-bold mt-3">{{$p.t('jointstudies', 'edit')}}</p>
</template>
<form-form ref="formJointStudies">
<div class="row mb-3">
<form-input
container-class="stv-details-jointstudy-mobilitaetstyp"
:label="$p.t('global', 'typ')"
type="select"
v-model="formData.mobilitaetstyp_kurzbz"
name="mobilitaetstyp_kurzbz"
disabled
>
<option
v-for="mob in listTypenMobility"
:key="mob.mobilitaetstyp_kurzbz"
:value="mob.mobilitaetstyp_kurzbz"
>
{{mob.bezeichnung}}
</option>
</form-input>
</div>
<div class="row mb-3">
<form-input
container-class="stv-details-jointstudies-studiensemester"
:label="$p.t('lehre', 'studiensemester')"
type="select"
v-model="formData.studiensemester_kurzbz"
name="studiensemester_kurzbz"
>
<option
v-for="sem in listStudiensemester"
:key="sem.studiensemester_kurzbz"
:value="sem.studiensemester_kurzbz"
>
{{sem.studiensemester_kurzbz}}
</option>
</form-input>
</div>
<div class="row mb-3">
<form-input
container-class="stv-details-jointstudies-partner"
:label="$p.t('mobility', 'mobilitaetsprogramm')"
type="select"
v-model="formData.mobilitaetsprogramm_code"
name="mobilitaetsprogramm_code"
>
<option
v-for="mob in programsMobility"
:key="mob.mobilitaetsprogramm_code"
:value="mob.mobilitaetsprogramm_code"
>
{{mob.beschreibung}}
</option>
</form-input>
</div>
<div class="row mb-3">
<form-input
container-class="stv-details-jointstudies-studienprogramm"
:label="$p.t('jointstudies', 'studienprogramm')"
type="select"
v-model="formData.gsprogramm_id"
name="gsprogramm_id"
>
<option
v-for="prog in listStudienprogramme"
:key="prog.gsprogramm_id"
:value="prog.gsprogramm_id"
>
{{prog.bezeichnung}}
</option>
</form-input>
</div>
<div class="row mb-3">
<form-input
container-class="stv-details-jointstudies-partner"
label="Partner"
type="select"
v-model="formData.firma_id"
name="firma_id"
>
<option
v-for="partner in listPartner"
:key="partner.firma_id"
:value="partner.firma_id"
>
{{partner.name}}
</option>
</form-input>
</div>
<div class="row mb-3">
<form-input
container-class="stv-details-jointstudies-status"
label="Status"
type="select"
v-model="formData.status_kurzbz"
name="status_kurzbz"
>
<option
v-for="status in statiPrestudent"
:key="status.status_kurzbz"
:value="status.status_kurzbz"
>
{{status.status_kurzbz}}
</option>
</form-input>
</div>
<div class="col-2 row mb-3">
<form-input
container-class="stv-details-jointstudies-ausbildungssemester"
:label="$p.t('lehre', 'ausbildungssemester')"
type="text"
v-model="formData.ausbildungssemester"
name="ausbildungssemester"
>
</form-input>
</div>
</form-form>
<template #footer>
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">{{$p.t('ui', 'abbrechen')}}</button>
<button v-if="statusNew" class="btn btn-primary" @click="addNewJointStudy()"> {{$p.t('ui', 'speichern')}}</button>
<button v-else class="btn btn-primary" @click="updateJointStudy(formData.mobilitaet_id)"> {{$p.t('ui', 'speichern')}}</button>
</template>
</bs-modal>
</div>
`
}
+143 -1
View File
@@ -41393,8 +41393,150 @@ and represent the current state of research on the topic. The prescribed citatio
'insertvon' => 'system'
)
)
)
),
// PROJEKTARBEITSBEURTEILUNG SS2025 ENDE ---------------------------------------------------------------------------
// FHC4 JOINT STUDIES START ----------------------------------------------------------------------------------------
array(
'app' => 'core',
'category' => 'stv',
'phrase' => 'tab_jointstudies',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'GS',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Joint Studies',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'jointstudies',
'phrase' => 'gemeinsamesStudium',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Gemeinsames Studium',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Joint Study',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'jointstudies',
'phrase' => 'gemeinsameStudien',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Gemeinsame Studien',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Joint Studies',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'jointstudies',
'phrase' => 'studienprogramm',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Studienprogramm',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Study Program',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'jointstudies',
'phrase' => 'neuAnlegen',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Gemeinsames Studium anlegen',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Add Joint Study',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'jointstudies',
'phrase' => 'edit',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Gemeinsames Studium bearbeiten',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Edit Joint Study',
'description' => '',
'insertvon' => 'system',
)
)
),
array(
'app' => 'core',
'category' => 'global',
'phrase' => 'mobilitaet_id',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Mobilität ID',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Mobility Id',
'description' => '',
'insertvon' => 'system'
)
)
),
// FHC4 JOINT STUDIES END ----------------------------------------------------------------------------------------
);