mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-07-19 16:02:15 +00:00
new Tab GemeinsameStudien
This commit is contained in:
@@ -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';
|
||||
}
|
||||
}
|
||||
@@ -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');
|
||||
},
|
||||
|
||||
@@ -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
@@ -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 ----------------------------------------------------------------------------------------
|
||||
);
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user