Compare commits

..

2 Commits

Author SHA1 Message Date
Harald Bamberger 0914562a71 Merge branch 'master' into bug-69092/Messages_API_getDataVorlage 2025-12-09 10:37:55 +01:00
ma0068 3333b25d12 use function getCurrent with studiengang_kz for templates 2025-11-06 14:29:13 +01:00
15 changed files with 95 additions and 131 deletions
@@ -32,10 +32,6 @@ class Studentenverwaltung extends Auth_Controller
'student/keine_studstatuspruefung' => $this->permissionlib->isBerechtigt('student/keine_studstatuspruefung'),
'lehre/reihungstestAufsicht' => $this->permissionlib->isBerechtigt('lehre/reihungstestAufsicht'),
'system/change_outputformat' => $this->permissionlib->getOE_isEntitledFor('system/change_outputformat'),
'student/editBakkZgv' => $this->permissionlib->isBerechtigt('student/editBakkZgv'),
'student/editMakkZgv' => $this->permissionlib->isBerechtigt('student/editMakkZgv'),
'student/editDokZgv' => $this->permissionlib->isBerechtigt('student/editDokZgv'),
'student/editBismelden' => $this->permissionlib->isBerechtigt('student/editBismelden')
],
'variables' => [
'semester_aktuell' => $this->variablelib->getVar('semester_aktuell')
@@ -21,6 +21,8 @@ class Messages extends FHCAPI_Controller
'getReplyData' => ['admin:r', 'assistenz:r'],
'getPersonId' => ['admin:r', 'assistenz:r'],
'getUid' => ['admin:r', 'assistenz:r'],
'getStudiengang' => ['admin:r', 'assistenz:r'],
]);
//Load Models
@@ -84,21 +86,17 @@ class Messages extends FHCAPI_Controller
$this->terminateWithSuccess(array());
}
public function getDataVorlage($vorlage_kurzbz)
public function getDataVorlage($vorlage_kurzbz, $studiengang_kz)
{
$studiengang_kz = 0;
$this->load->model('system/Vorlagestudiengang_model', 'VorlagestudiengangModel');
$this->VorlagestudiengangModel->addOrder('version', 'DESC');
if(!$studiengang_kz)
$this->terminateWithSuccess(null);
$result = $this->VorlagestudiengangModel->loadWhere(
[
'vorlage_kurzbz' =>$vorlage_kurzbz,
'studiengang_kz' => $studiengang_kz
]);
$this->load->model('system/Vorlagestudiengang_model', 'VorlagestudiengangModel');
$result = $this->VorlagestudiengangModel->getCurrent($vorlage_kurzbz, $studiengang_kz);
$data = $this->getDataOrTerminateWithError($result);
$vorlage = current($data);
$this->terminateWithSuccess($vorlage);
$this->terminateWithSuccess(current($data));
}
public function getMessageVarsPerson($id, $typeId)
@@ -143,8 +141,6 @@ class Messages extends FHCAPI_Controller
public function sendMessage($recipient_id)
{
//has to be uid
// $this->terminateWithError("uid", $recipient_id, self::ERROR_TYPE_GENERAL);
//default setting
$receiversPersonId = $this->_getPersonId($recipient_id, 'uid');
@@ -387,6 +383,21 @@ class Messages extends FHCAPI_Controller
$this->terminateWithSuccess($benutzer->uid);
}
public function getStudiengang($id, $typeId)
{
if($typeId!= "prestudent_id" && $typeId!="uid" )
$this->terminateWithSuccess(null);
$prestudent_id = ($typeId == 'uid') ? $this->_getPrestudentIdFromUid($id) : $id;
$this->load->model('crm/Prestudent_model', 'PrestudentModel');
$result = $this->PrestudentModel->load($prestudent_id);
$data = $this->getDataOrTerminateWithError($result);
$studiengang_kz = current($data)->studiengang_kz;
return $this->terminateWithSuccess($studiengang_kz);
}
private function _getPersonId($id, $typeId)
{
if ($typeId == 'uid' || $typeId == 'mitarbeiter_uid')
@@ -416,7 +427,6 @@ class Messages extends FHCAPI_Controller
private function _getPrestudentIdFromUid($uid)
{
// $this->terminateWithError($uid, self::ERROR_TYPE_GENERAL);
$this->load->model('crm/Student_model', 'StudentModel');
$result = $this->StudentModel->loadWhere(
['student_uid' => $uid]
@@ -331,10 +331,7 @@ class Config extends FHCAPI_Controller
];
$result['status'] = [
'title' => 'Status',
'component' => absoluteJsImportUrl('public/js/components/Stv/Studentenverwaltung/Details/MultiStatus.js'),
'config' => [
'showStatusVorruecken' => defined('STATUS_VORRUECKEN_ANZEIGEN') ? STATUS_VORRUECKEN_ANZEIGEN : true,
]
'component' => absoluteJsImportUrl('public/js/components/Stv/Studentenverwaltung/Details/MultiStatus.js')
];
$result['documents'] = [
'title' => $this->p->t('stv', 'tab_documents'),
@@ -1341,7 +1341,6 @@ class Status extends FHCAPI_Controller
'updateamum' => date('c'),
'updatevon' => $authUID
];
$nullableFields = ['statusgrund_id', 'anmerkung', 'rt_stufe'];
foreach ([
'orgform_kurzbz',
'anmerkung',
@@ -1350,17 +1349,8 @@ class Status extends FHCAPI_Controller
'rt_stufe',
'statusgrund_id'
] as $key)
{
if (in_array($key, $nullableFields))
{
$updateData[$key] = ($this->input->post($key) === '') ? null : $this->input->post($key);
}
else if ($this->input->post($key))
{
if ($this->input->post($key))
$updateData[$key] = $this->input->post($key);
}
}
if ($this->input->post('bestaetigtam')) {
$updateData['bestaetigtam'] = $this->input->post('bestaetigtam');
+4 -1
View File
@@ -45,7 +45,10 @@ $saved = isset($saved) && $saved === true;
<?php echo $this->p->t('uhstat', 'rechtsbelehrung') ?>
</p>
<p>
<?php echo $this->p->t('uhstat', 'uhstat1AnmeldungEinleitungstextOhneSvnr') ?>
<?php echo $this->p->t('uhstat', 'uhstat1AnmeldungEinleitungstext') ?>
</p>
<p>
<?php echo $this->p->t('uhstat', 'uhstat1EinleitungSvnrtext') ?>
</p>
<br>
<?php if ($savePermission): ?>
-4
View File
@@ -360,8 +360,4 @@ define('SANCHO_MAIL_HEADER_IMG', 'sancho_header_DEFAULT.jpg');
// footer image for eigene Mails
define('SANCHO_MAIL_FOOTER_IMG', 'sancho_footer_DEFAULT.jpg');
// Gibt an, ob in der StudVW der Status vorgerueckt werden kann
define('STATUS_VORRUECKEN_ANZEIGEN', true);
?>
+9 -3
View File
@@ -62,10 +62,10 @@ export default {
url: 'api/frontend/v1/messages/messages/getUid/' + userParams.id + '/' + userParams.type_id
};
},
getDataVorlage(vorlage_kurzbz){
getDataVorlage(vorlage_kurzbz, studiengang_kz){
return {
method: 'get',
url: 'api/frontend/v1/messages/messages/getDataVorlage/' + vorlage_kurzbz
url: 'api/frontend/v1/messages/messages/getDataVorlage/' + vorlage_kurzbz + '/' + studiengang_kz
};
},
getNameOfDefaultRecipient(params){
@@ -106,5 +106,11 @@ export default {
method: 'post',
url: 'api/frontend/v1/messages/messages/deleteMessage/' + messageId
};
}
},
getStudiengang(userParams){
return {
method: 'get',
url: 'api/frontend/v1/messages/messages/getStudiengang/' + userParams.id + '/' + userParams.type_id
};
},
}
@@ -57,6 +57,7 @@ export default {
previewBody: "",
replyData: null,
uid: null,
studiengang_kz: null
}
},
methods: {
@@ -136,9 +137,9 @@ export default {
}
);
},
getDataVorlage(vorlage_kurzbz){
getDataVorlage(vorlage_kurzbz, studiengang_kz){
return this.$api
.call(this.endpoint.getDataVorlage(vorlage_kurzbz))
.call(this.endpoint.getDataVorlage(vorlage_kurzbz, studiengang_kz))
.then(response => {
this.formData.body = response.data.text;
this.formData.subject = response.data.subject;
@@ -193,7 +194,7 @@ export default {
},
handleSelectedVorlage(vorlage_kurzbz) {
if (typeof vorlage_kurzbz === "string") {
this.getDataVorlage(vorlage_kurzbz);
this.getDataVorlage(vorlage_kurzbz, this.studiengang_kz);
}
},
showPreview(){
@@ -213,6 +214,18 @@ export default {
})
.catch(this.$fhcAlert.handleSystemError);
},
getStudiengang(id, typeId){
const params = {
id: id,
type_id: typeId
};
this.$api
.call(this.endpoint.getStudiengang(params))
.then(result => {
this.studiengang_kz = result.data;
})
.catch(this.$fhcAlert.handleSystemError);
},
show(){
this.$refs.modalNewMessage.show();
},
@@ -235,7 +248,7 @@ export default {
handler(newVal){
if (newVal && newVal != null) {
this.formData.subject = newVal;
return this.getDataVorlage(newVal);
return this.getDataVorlage(newVal, this.studiengang_kz);
}
}
},
@@ -281,6 +294,7 @@ export default {
}
if(this.typeId == 'prestudent_id' || this.typeId == 'uid'){
this.getStudiengang(this.id, this.typeId);
const params = {
id: this.id,
type_id: this.typeId
@@ -290,6 +304,7 @@ export default {
.then(result => {
this.fieldsPrestudent = result.data;
const prestudent = this.fieldsPrestudent[0];
//this.studiengang_kz = prestudent.Studiengangskennzahl;
this.itemsPrestudent = Object.entries(prestudent).map(([key, value]) => ({
label: key.toLowerCase(),
value: '{' + key.toLowerCase() + '}'
@@ -68,7 +68,8 @@ export default {
previewBody: "",
replyData: null,
uid: null,
messageSent: false
messageSent: false,
studiengang_kz: null
}
},
methods: {
@@ -136,9 +137,9 @@ export default {
}
);
},
getDataVorlage(vorlage_kurzbz){
getDataVorlage(vorlage_kurzbz, studiengang_kz){
return this.$api
.call(this.endpoint.getDataVorlage(vorlage_kurzbz))
.call(this.endpoint.getDataVorlage(vorlage_kurzbz, studiengang_kz))
.then(response => {
this.formData.body = response.data.text;
this.formData.subject = response.data.subject;
@@ -191,7 +192,7 @@ export default {
},
handleSelectedVorlage(vorlage_kurzbz) {
if (typeof vorlage_kurzbz === "string") {
this.getDataVorlage(vorlage_kurzbz);
this.getDataVorlage(vorlage_kurzbz, this.studiengang_kz);
}
},
hideTemplate(){
@@ -218,7 +219,19 @@ export default {
this.uid = result.data;
})
.catch(this.$fhcAlert.handleSystemError);
}
},
getStudiengang(id, typeId){
const params = {
id: id,
type_id: typeId
};
this.$api
.call(this.endpoint.getStudiengang(params))
.then(result => {
this.studiengang_kz = result.data;
})
.catch(this.$fhcAlert.handleSystemError);
},
},
watch: {
'formData.body': {
@@ -236,7 +249,7 @@ export default {
if (newVal && newVal != null) {
this.formData.subject = newVal;
return this.getDataVorlage(newVal);
return this.getDataVorlage(newVal, this.studiengang_kz);
}
}
},
@@ -264,6 +277,7 @@ export default {
}
if (['prestudent_id', 'uid'].includes(this.typeId)){
this.getStudiengang(this.id, this.typeId);
const params = {
id: this.id,
type_id: this.typeId
@@ -84,12 +84,7 @@ export default {
configShowAufnahmegruppen: this.config.showAufnahmegruppen,
configAllowUebernahmePunkte: this.config.allowUebernahmePunkte,
configUseReihungstestPunkte: this.config.useReihungstestPunkte,
appConfig: Vue.computed(() => this.appconfig),
hasZGVBakkPermission: this.permissions['student/editBakkZgv'],
hasZGVMasterPermission: this.permissions['student/editMakkZgv'],
hasZGVDoctorPermission: this.permissions['student/editDokZgv'],
hasBismeldenPermission: this.permissions['student/editBismelden'],
appConfig: Vue.computed(() => this.appconfig)
}
},
data() {
@@ -438,9 +438,11 @@ export default {
if (this.stgInfo.typ === 'b') {
this.formData.pruefungstyp_kurzbz = 'Bachelor';
this.formData.protokoll = this.$p.t('abschlusspruefung', 'pruefungsnotizenMaster');
}
if (this.stgInfo.typ === 'd' || this.stgInfo === 'm') {
this.formData.pruefungstyp_kurzbz = 'Diplom';
this.formData.protokoll = this.$p.t('abschlusspruefung', 'pruefungsnotizenMaster');
}
if (this.stgInfo.typ === 'lg') {
this.formData.pruefungstyp_kurzbz = 'lgabschluss';
@@ -7,14 +7,10 @@ export default {
},
props: {
modelValue: Object,
config: {
type: Object,
default: {}
}
},
template: `
<div class="stv-details-multistatus h-100">
<tbl-multi-status :model-value="modelValue" :config="config"></tbl-multi-status>
<tbl-multi-status :model-value="modelValue"></tbl-multi-status>
</div>
`
}
@@ -30,22 +30,6 @@ export default {
from: 'hasAdminPermission',
default: false
},
hasZGVBakkPermission: {
from: 'hasZGVBakkPermission',
default: false
},
hasZGVMasterPermission: {
from: 'hasZGVMasterPermission',
default: false
},
hasZGVDoctorPermission: {
from: 'hasZGVDoctorPermission',
default: false
},
hasBismeldenPermission: {
from: 'hasBismeldenPermission',
default: false
},
currentSemester: {
from: 'currentSemester',
required: true
@@ -122,7 +106,7 @@ export default {
},
methods: {
async loadPrestudent() {
loadPrestudent() {
return this.$api
.call(ApiStvPrestudent.get(this.modelValue.prestudent_id, this.currentSemester))
.then(result => result.data)
@@ -170,8 +154,8 @@ export default {
)
},
},
async created() {
await this.loadPrestudent();
created() {
this.loadPrestudent();
this.$api
.call(ApiStvPrestudent.getBezeichnungZGV())
.then(result => result.data)
@@ -289,7 +273,6 @@ export default {
dropdown
name="zgv_code"
@complete="filterZgvs"
:disabled="!hasZGVBakkPermission"
>
<template #option="slotProps">
<div
@@ -308,7 +291,6 @@ export default {
type="text"
v-model="data.zgvort"
name="zgvort"
:disabled="!hasZGVBakkPermission"
>
</form-input>
<form-input
@@ -325,7 +307,6 @@ export default {
format="dd.MM.yyyy"
preview-format="dd.MM.yyyy"
:teleport="true"
:disabled="!hasZGVBakkPermission"
>
</form-input>
<form-input
@@ -335,7 +316,6 @@ export default {
type="select"
v-model="data.zgvnation"
name="zgvnation"
:disabled="!hasZGVBakkPermission"
>
<!-- TODO(chris): gesperrte nationen können nicht ausgewählt werden! Um das zu realisieren müsste man ein pseudo select machen -->
<option value="">&nbsp;</option>
@@ -356,7 +336,6 @@ export default {
dropdown
name="zgvmas_code"
@complete="filterMasterZgvs"
:disabled="!hasZGVMasterPermission"
>
<template #option="slotProps">
<div
@@ -375,7 +354,6 @@ export default {
type="text"
v-model="data.zgvmaort"
name="zgvmaort"
:disabled="!hasZGVMasterPermission"
>
</form-input>
<form-input
@@ -392,7 +370,6 @@ export default {
format="dd.MM.yyyy"
preview-format="dd.MM.yyyy"
:teleport="true"
:disabled="!hasZGVMasterPermission"
>
</form-input>
<form-input
@@ -402,7 +379,6 @@ export default {
type="select"
v-model="data.zgvmanation"
name="zgvmanation"
:disabled="!hasZGVMasterPermission"
>
<!-- TODO(chris): gesperrte nationen können nicht ausgewählt werden! Um das zu realisieren müsste man ein pseudo select machen -->
<option value="">&nbsp;</option>
@@ -424,7 +400,6 @@ export default {
dropdown
name="zgvdoktor_code"
@complete="filterDoktorZgvs"
:disabled="!hasZGVDoctorPermission"
>
<template #option="slotProps">
<div
@@ -443,7 +418,6 @@ export default {
type="text"
v-model="data.zgvdoktorort"
name="zgvdoktorort"
:disabled="!hasZGVDoctorPermission"
>
</form-input>
<form-input
@@ -460,7 +434,6 @@ export default {
format="dd.MM.yyyy"
preview-format="dd.MM.yyyy"
:teleport="true"
:disabled="!hasZGVDoctorPermission"
>
</form-input>
<form-input
@@ -470,7 +443,6 @@ export default {
type="select"
v-model="data.zgvdoktornation"
name="zgvdoktornation"
:disabled="!hasZGVDoctorPermission"
>
<!-- TODO(chris): gesperrte nationen können nicht ausgewählt werden! Um das zu realisieren müsste man ein pseudo select machen -->
<option value="">&nbsp;</option>
@@ -487,7 +459,6 @@ export default {
type="checkbox"
v-model="data.zgv_erfuellt"
name="zgv_erfuellt"
:disabled="!hasZGVBakkPermission"
>
</form-input>
</div>
@@ -499,7 +470,6 @@ export default {
type="checkbox"
v-model="data.zgvmas_erfuellt"
name="zgvmas_erfuellt"
:disabled="!hasZGVMasterPermission"
>
</form-input>
</div>
@@ -511,7 +481,6 @@ export default {
type="checkbox"
v-model="data.zgvdoktor_erfuellt"
name="zgvdoktor_erfuellt"
:disabled="!hasZGVDoctorPermission"
>
</form-input>
</div>
@@ -632,7 +601,6 @@ export default {
type="checkbox"
v-model="data.bismelden"
name="bismelden"
:disabled="!hasBismeldenPermission"
>
</form-input>
</div>
@@ -51,8 +51,7 @@ export default{
}
},
props: {
modelValue: Object,
config: Object,
modelValue: Object
},
data() {
return {
@@ -176,18 +175,15 @@ export default{
const data = cell.getData();
let button = document.createElement('button');
if (this.config?.showStatusVorruecken !== false)
{
button.className = 'btn btn-outline-secondary btn-action';
button.innerHTML = '<i class="fa fa-forward"></i>';
button.title = this.$p.t('ui', 'btn_statusVorruecken');
button.addEventListener('click', () =>
this.actionAdvanceStatus(data.status_kurzbz, data.studiensemester_kurzbz, data.ausbildungssemester)
);
if (!['Student', 'Diplomand', 'Unterbrecher'].includes(data.status_kurzbz))
button.disabled = true;
container.append(button);
}
button.className = 'btn btn-outline-secondary btn-action';
button.innerHTML = '<i class="fa fa-forward"></i>';
button.title = this.$p.t('ui', 'btn_statusVorruecken');
button.addEventListener('click', () =>
this.actionAdvanceStatus(data.status_kurzbz, data.studiensemester_kurzbz, data.ausbildungssemester)
);
if (!['Student', 'Diplomand', 'Unterbrecher'].includes(data.status_kurzbz))
button.disabled = true;
container.append(button);
button = document.createElement('button');
button.className = 'btn btn-outline-secondary btn-action';
-20
View File
@@ -52330,26 +52330,6 @@ I have been informed that I am under no obligation to consent to the transmissio
)
),
// ### Personen zusammenlegen Phrasen END
array(
'app' => 'core',
'category' => 'uhstat',
'phrase' => 'uhstat1AnmeldungEinleitungstextOhneSvnr',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Das Senden der Daten ist nur möglich, wenn alle Fragen beantwortet worden sind. Wenn Sie etwas nicht wissen, wählen Sie die Antwortmöglichkeit „unbekannt“, aber beantworten Sie bitte alle Fragen.',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Sending the data is only possible if all questions have been answered. If you don\'t know something, choose the answer option “unknown”, but please answer all questions.',
'description' => '',
'insertvon' => 'system'
)
)
)
);