mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-06-01 12:19:28 +00:00
merged stv saveProjektarbeit/saveBetreuer buttons; benoten button for betreuer is now a table action button; remove viewData.uid and call student_uid via authinfo endpoint; digital signature info links in student abgabetool; show projektarbeit note in overview inside the accordions content aswell as flex-end in the header; smaller vertical padding on all abgabetool modals from 3rem to 1.5 rem aka py-5 to py-4;
This commit is contained in:
@@ -38,6 +38,9 @@ $config['SIGNATUR_CHECK_PAABGABETYPEN'] = ['end'];
|
|||||||
|
|
||||||
// to be used as "https://moodle.technikum-wien.at/course/view.php?idnumber=dl{$stg_kz}" for stg specific moodle routing
|
// to be used as "https://moodle.technikum-wien.at/course/view.php?idnumber=dl{$stg_kz}" for stg specific moodle routing
|
||||||
$config['STG_MOODLE_LINK'] = 'https://moodle.technikum-wien.at/course/view.php?idnumber=dl';
|
$config['STG_MOODLE_LINK'] = 'https://moodle.technikum-wien.at/course/view.php?idnumber=dl';
|
||||||
|
// TODO: check if these links change if the file changes and how to better retrieve the link?
|
||||||
|
$config['SIGNATUR_INFO_LINK_GERMAN'] = 'https://cis.technikum-wien.at/cms/dms.php?id=214779';
|
||||||
|
$config['SIGNATUR_INFO_LINK_ENGLISH'] = 'https://cis.technikum-wien.at/cms/dms.php?id=264256';
|
||||||
|
|
||||||
$config['ASSISTENZ_SAMMELMAIL_BUTTON_STUDENT'] = true;
|
$config['ASSISTENZ_SAMMELMAIL_BUTTON_STUDENT'] = true;
|
||||||
$config['ASSISTENZ_SAMMELMAIL_BUTTON_BETREUER'] = true;
|
$config['ASSISTENZ_SAMMELMAIL_BUTTON_BETREUER'] = true;
|
||||||
|
|||||||
@@ -114,11 +114,15 @@ class Abgabe extends FHCAPI_Controller
|
|||||||
$moodle_link = $this->config->item('STG_MOODLE_LINK');
|
$moodle_link = $this->config->item('STG_MOODLE_LINK');
|
||||||
$title_edit_allowed = $this->config->item('STUDENT_EDIT_PROJEKTARBEIT_TITLE');
|
$title_edit_allowed = $this->config->item('STUDENT_EDIT_PROJEKTARBEIT_TITLE');
|
||||||
$confetti_on_endupload = $this->config->item('CONFETTI_ON_ENDUPLOAD');
|
$confetti_on_endupload = $this->config->item('CONFETTI_ON_ENDUPLOAD');
|
||||||
|
$siginfolink_german = $this->config->item('SIGNATUR_INFO_LINK_GERMAN');
|
||||||
|
$siginfolink_english = $this->config->item('SIGNATUR_INFO_LINK_ENGLISH');
|
||||||
|
|
||||||
$ret = array(
|
$ret = array(
|
||||||
'moodle_link' => $moodle_link,
|
'moodle_link' => $moodle_link,
|
||||||
'title_edit_allowed' => $title_edit_allowed,
|
'title_edit_allowed' => $title_edit_allowed,
|
||||||
'confetti_on_endupload' => $confetti_on_endupload
|
'confetti_on_endupload' => $confetti_on_endupload,
|
||||||
|
'siginfolink_german' => $siginfolink_german,
|
||||||
|
'siginfolink_english' => $siginfolink_english
|
||||||
);
|
);
|
||||||
|
|
||||||
$this->terminateWithSuccess($ret);
|
$this->terminateWithSuccess($ret);
|
||||||
|
|||||||
@@ -25,9 +25,6 @@ const app = Vue.createApp({
|
|||||||
|
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
viewData() {
|
|
||||||
return { uid: this.uid}
|
|
||||||
},
|
|
||||||
student_uid_computed() {
|
student_uid_computed() {
|
||||||
return this.student_uid ?? this.uid
|
return this.student_uid ?? this.uid
|
||||||
},
|
},
|
||||||
@@ -55,10 +52,10 @@ const app = Vue.createApp({
|
|||||||
},
|
},
|
||||||
template: `
|
template: `
|
||||||
<template v-if="comp && uid">
|
<template v-if="comp && uid">
|
||||||
<AbgabetoolStudent v-if="comp == 'AbgabetoolStudent'" :viewData="viewData" :student_uid_prop="student_uid_computed"></AbgabetoolStudent>
|
<AbgabetoolStudent v-if="comp == 'AbgabetoolStudent'" :student_uid_prop="student_uid_computed"></AbgabetoolStudent>
|
||||||
<AbgabetoolMitarbeiter v-if="comp == 'AbgabetoolMitarbeiter'" :viewData="viewData"></AbgabetoolMitarbeiter>
|
<AbgabetoolMitarbeiter v-if="comp == 'AbgabetoolMitarbeiter'"></AbgabetoolMitarbeiter>
|
||||||
<AbgabetoolAssistenz v-if="comp == 'AbgabetoolAssistenz'" :viewData="viewData" :stg_kz_prop="stg_kz_computed"></AbgabetoolAssistenz>
|
<AbgabetoolAssistenz v-if="comp == 'AbgabetoolAssistenz'" :stg_kz_prop="stg_kz_computed"></AbgabetoolAssistenz>
|
||||||
<DeadlineOverview v-if="comp == 'DeadlinesOverview'" :viewData="viewData"></DeadlineOverview>
|
<DeadlineOverview v-if="comp == 'DeadlinesOverview'"></DeadlineOverview>
|
||||||
</template>
|
</template>
|
||||||
`
|
`
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -625,6 +625,7 @@ export const AbgabeMitarbeiterDetail = {
|
|||||||
dialogClass="bordered-modal modal-lg"
|
dialogClass="bordered-modal modal-lg"
|
||||||
:backdrop="true"
|
:backdrop="true"
|
||||||
@hideBsModal="showAutomagicModalPhrase=false;"
|
@hideBsModal="showAutomagicModalPhrase=false;"
|
||||||
|
bodyClass="px-4 py-4"
|
||||||
>
|
>
|
||||||
<template v-slot:title>
|
<template v-slot:title>
|
||||||
<div>
|
<div>
|
||||||
@@ -892,9 +893,6 @@ export const AbgabeMitarbeiterDetail = {
|
|||||||
<Message v-else-if="termin?.signatur == false" severity="error" :closable="false" :pt="getMessagePtStyle"> {{ $capitalize($p.t('abgabetool/c4keineSignatur')) }} </Message>
|
<Message v-else-if="termin?.signatur == false" severity="error" :closable="false" :pt="getMessagePtStyle"> {{ $capitalize($p.t('abgabetool/c4keineSignatur')) }} </Message>
|
||||||
<Message v-else-if="termin?.signatur == 'error'" severity="warn" :closable="false" :pt="getMessagePtStyle"> {{ $capitalize($p.t('abgabetool/c4signaturServerError')) }} </Message>
|
<Message v-else-if="termin?.signatur == 'error'" severity="warn" :closable="false" :pt="getMessagePtStyle"> {{ $capitalize($p.t('abgabetool/c4signaturServerError')) }} </Message>
|
||||||
</div>
|
</div>
|
||||||
<!-- <div v-else class="col-auto">-->
|
|
||||||
<!-- <Message severity="info" :closable="false" :pt="getMessagePtStyle"> {{ $p.t('abgabetool/c4noFileFound') }} </Message>-->
|
|
||||||
<!-- </div>-->
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@@ -947,7 +945,8 @@ export const AbgabeMitarbeiterDetail = {
|
|||||||
<bs-modal
|
<bs-modal
|
||||||
ref="modalContainerZusatzdaten"
|
ref="modalContainerZusatzdaten"
|
||||||
class="bootstrap-prompt"
|
class="bootstrap-prompt"
|
||||||
dialogClass="bordered-modal modal-lg">
|
dialogClass="bordered-modal modal-lg"
|
||||||
|
bodyClass="px-4 py-4">
|
||||||
<template v-slot:title>
|
<template v-slot:title>
|
||||||
<div>
|
<div>
|
||||||
{{$capitalize( $p.t('abgabetool/c4enduploadZusatzdaten') )}}
|
{{$capitalize( $p.t('abgabetool/c4enduploadZusatzdaten') )}}
|
||||||
|
|||||||
@@ -21,7 +21,16 @@ export const AbgabeStudentDetail = {
|
|||||||
VueDatePicker,
|
VueDatePicker,
|
||||||
FhcOverlay
|
FhcOverlay
|
||||||
},
|
},
|
||||||
inject: ['notenOptions', 'isMobile', 'isViewMode', 'moodle_link', 'confetti_on_endupload', 'title_edit_allowed'],
|
inject: [
|
||||||
|
'notenOptions',
|
||||||
|
'isMobile',
|
||||||
|
'isViewMode',
|
||||||
|
'moodle_link',
|
||||||
|
'confetti_on_endupload',
|
||||||
|
'title_edit_allowed',
|
||||||
|
'siginfolink_german',
|
||||||
|
'siginfolink_english'
|
||||||
|
],
|
||||||
props: {
|
props: {
|
||||||
projektarbeit: {
|
projektarbeit: {
|
||||||
type: Object,
|
type: Object,
|
||||||
@@ -301,6 +310,15 @@ export const AbgabeStudentDetail = {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
|
getSignaturInfoLink() {
|
||||||
|
if(this.$p.user_language.value == 'German' && this.siginfolink_german) return this.siginfolink_german
|
||||||
|
else if (this.$p.user_language.value == 'English' && this.siginfolink_english) return this.siginfolink_english
|
||||||
|
},
|
||||||
|
getSignaturInfoAvailable() {
|
||||||
|
if(this.$p.user_language.value == 'German' && this.siginfolink_german) return true
|
||||||
|
else if (this.$p.user_language.value == 'English' && this.siginfolink_english) return true
|
||||||
|
else return false
|
||||||
|
},
|
||||||
getMoodleLink() {
|
getMoodleLink() {
|
||||||
return this.moodle_link + this.projektarbeit.studiengang_kz
|
return this.moodle_link + this.projektarbeit.studiengang_kz
|
||||||
},
|
},
|
||||||
@@ -406,9 +424,15 @@ export const AbgabeStudentDetail = {
|
|||||||
<p>{{$capitalize( $p.t('abgabetool/c4betreuerv2') ) }}: {{projektarbeit ? $p.t('abgabetool/c4betrart' + projektarbeit.betreuerart_kurzbz) + ' ' + projektarbeit.betreuer : ''}}</p>
|
<p>{{$capitalize( $p.t('abgabetool/c4betreuerv2') ) }}: {{projektarbeit ? $p.t('abgabetool/c4betrart' + projektarbeit.betreuerart_kurzbz) + ' ' + projektarbeit.betreuer : ''}}</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-4">
|
<div class="col-4">
|
||||||
<p>{{ $p.t('abgabetool/c4checkoutStgMoodleInfos') }}
|
<div class="row">
|
||||||
<a :href="getMoodleLink" target="_blank">Moodle</a>
|
<p>{{ $p.t('abgabetool/c4checkoutStgMoodleInfos') }}
|
||||||
</p>
|
<a :href="getMoodleLink" target="_blank">Moodle</a>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row" v-if="getSignaturInfoAvailable">
|
||||||
|
<a :href="getSignaturInfoLink" target="_blank">{{$p.t('abgabetool/c4signaturinfo')}} <i class="fa-solid fa-circle-info"></i></a>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -532,7 +556,7 @@ export const AbgabeStudentDetail = {
|
|||||||
<div class="col-12 col-md-9">
|
<div class="col-12 col-md-9">
|
||||||
<template v-if="termin?.abgabedatum">
|
<template v-if="termin?.abgabedatum">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div style="width:100px; align-content: center;">
|
<div style="width:100px; align-content: end;">
|
||||||
<h6>{{ termin.abgabedatum?.split("-").reverse().join(".") }}</h6>
|
<h6>{{ termin.abgabedatum?.split("-").reverse().join(".") }}</h6>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -613,6 +637,7 @@ export const AbgabeStudentDetail = {
|
|||||||
ref="modalTitelEdit"
|
ref="modalTitelEdit"
|
||||||
class="bootstrap-prompt"
|
class="bootstrap-prompt"
|
||||||
dialogClass="bordered-modal"
|
dialogClass="bordered-modal"
|
||||||
|
bodyClass="px-4 py-4"
|
||||||
>
|
>
|
||||||
<template v-slot:title>
|
<template v-slot:title>
|
||||||
{{$capitalize( $p.t('abgabetool/c4titelBearbeiten') )}}
|
{{$capitalize( $p.t('abgabetool/c4titelBearbeiten') )}}
|
||||||
@@ -653,7 +678,8 @@ export const AbgabeStudentDetail = {
|
|||||||
<bs-modal
|
<bs-modal
|
||||||
ref="modalContainerEnduploadZusatzdaten"
|
ref="modalContainerEnduploadZusatzdaten"
|
||||||
class="bootstrap-prompt"
|
class="bootstrap-prompt"
|
||||||
dialogClass="bordered-modal modal-lg">
|
dialogClass="bordered-modal modal-lg"
|
||||||
|
bodyClass="px-4 py-4">
|
||||||
<template v-slot:title>
|
<template v-slot:title>
|
||||||
<div>
|
<div>
|
||||||
{{$capitalize( $p.t('abgabetool/c4enduploadZusatzdaten') )}}
|
{{$capitalize( $p.t('abgabetool/c4enduploadZusatzdaten') )}}
|
||||||
|
|||||||
@@ -42,14 +42,6 @@ export const AbgabetoolAssistenz = {
|
|||||||
props: {
|
props: {
|
||||||
stg_kz_prop: {
|
stg_kz_prop: {
|
||||||
default: null
|
default: null
|
||||||
},
|
|
||||||
viewData: {
|
|
||||||
type: Object,
|
|
||||||
required: true,
|
|
||||||
default: () => ({name: '', uid: ''}),
|
|
||||||
validator(value) {
|
|
||||||
return value && value.uid // && value.name -> extensive viewData use only for cis4 onwards
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
@@ -1926,10 +1918,6 @@ export const AbgabetoolAssistenz = {
|
|||||||
'<p style="max-width: 100%; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; margin: 0px;">'+longForm+'</p></div>'
|
'<p style="max-width: 100%; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; margin: 0px;">'+longForm+'</p></div>'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
detailFormatter(cell) {
|
|
||||||
return '<div style="display: flex; justify-content: start; align-items: center; height: 100%">' +
|
|
||||||
'<a><i class="fa fa-folder-open" style="color:#00649C"></i></a></div>'
|
|
||||||
},
|
|
||||||
pkzTextFormatter(cell) {
|
pkzTextFormatter(cell) {
|
||||||
const val = cell.getValue()
|
const val = cell.getValue()
|
||||||
|
|
||||||
@@ -2351,7 +2339,11 @@ export const AbgabetoolAssistenz = {
|
|||||||
<template v-if="phrasenResolved">
|
<template v-if="phrasenResolved">
|
||||||
<FhcOverlay :active="loading || saving"></FhcOverlay>
|
<FhcOverlay :active="loading || saving"></FhcOverlay>
|
||||||
|
|
||||||
<bs-modal ref="modalContainerEditSeries" class="bootstrap-prompt" dialogClass="modal-lg">
|
<bs-modal
|
||||||
|
ref="modalContainerEditSeries"
|
||||||
|
class="bootstrap-prompt"
|
||||||
|
dialogClass="modal-lg"
|
||||||
|
bodyClass="px-4 py-4">
|
||||||
<template v-slot:title>
|
<template v-slot:title>
|
||||||
<div>{{ $p.t('abgabetool/c4editTerminserie') }}</div>
|
<div>{{ $p.t('abgabetool/c4editTerminserie') }}</div>
|
||||||
<div class="text-muted" style="font-size: 0.9rem;">
|
<div class="text-muted" style="font-size: 0.9rem;">
|
||||||
@@ -2450,8 +2442,11 @@ export const AbgabetoolAssistenz = {
|
|||||||
</template>
|
</template>
|
||||||
</bs-modal>
|
</bs-modal>
|
||||||
|
|
||||||
<bs-modal ref="modalContainerAddSeries" class="bootstrap-prompt"
|
<bs-modal
|
||||||
dialogClass="modal-lg">
|
ref="modalContainerAddSeries"
|
||||||
|
class="bootstrap-prompt"
|
||||||
|
dialogClass="modal-lg"
|
||||||
|
bodyClass="px-4 py-4">
|
||||||
<template v-slot:title>
|
<template v-slot:title>
|
||||||
<div>
|
<div>
|
||||||
{{ $p.t('abgabetool/neueTerminserie') }}
|
{{ $p.t('abgabetool/neueTerminserie') }}
|
||||||
@@ -2530,7 +2525,8 @@ export const AbgabetoolAssistenz = {
|
|||||||
|
|
||||||
<bs-modal ref="modalContainerAbgabeDetail" class="bootstrap-prompt"
|
<bs-modal ref="modalContainerAbgabeDetail" class="bootstrap-prompt"
|
||||||
dialogClass="modal-xl" :allowFullscreenExpand="true"
|
dialogClass="modal-xl" :allowFullscreenExpand="true"
|
||||||
@toggle-fullscreen="handleToggleFullscreenDetail">
|
@toggle-fullscreen="handleToggleFullscreenDetail"
|
||||||
|
bodyClass="px-4 py-4">
|
||||||
<template v-slot:title>
|
<template v-slot:title>
|
||||||
<div>
|
<div>
|
||||||
{{$p.t('abgabetool/c4abgabeMitarbeiterDetailTitle')}}
|
{{$p.t('abgabetool/c4abgabeMitarbeiterDetailTitle')}}
|
||||||
|
|||||||
@@ -32,16 +32,6 @@ export const AbgabetoolMitarbeiter = {
|
|||||||
old_abgabe_beurteilung_link: Vue.computed(() => this.old_abgabe_beurteilung_link)
|
old_abgabe_beurteilung_link: Vue.computed(() => this.old_abgabe_beurteilung_link)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
props: {
|
|
||||||
viewData: {
|
|
||||||
type: Object,
|
|
||||||
required: true,
|
|
||||||
default: () => ({name: '', uid: ''}),
|
|
||||||
validator(value) {
|
|
||||||
return value && value.uid // && value.name -> extensive viewData use only for cis4 onwards
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
filteredRows: null,
|
filteredRows: null,
|
||||||
@@ -147,7 +137,7 @@ export const AbgabetoolMitarbeiter = {
|
|||||||
cssClass: 'sticky-col',
|
cssClass: 'sticky-col',
|
||||||
visible: true
|
visible: true
|
||||||
},
|
},
|
||||||
{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4details'))), field: 'details', formatter: this.detailFormatter, headerFilter: false, headerSort: false, minWidth: 50, visible: true, tooltip: false, cssClass: 'sticky-col'},
|
{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4details'))), field: 'details', formatter: this.formAction, headerFilter: false, headerSort: false, minWidth: 85, visible: true, tooltip: false, cssClass: 'sticky-col'},
|
||||||
{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4personenkennzeichen'))), headerFilter: true, field: 'pkz', formatter: this.pkzTextFormatter, minWidth: 140, visible: false,tooltip: false},
|
{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4personenkennzeichen'))), headerFilter: true, field: 'pkz', formatter: this.pkzTextFormatter, minWidth: 140, visible: false,tooltip: false},
|
||||||
{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4vorname'))), field: 'vorname', headerFilter: true, formatter: this.centeredTextFormatter, minWidth: 100,visible: false},
|
{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4vorname'))), field: 'vorname', headerFilter: true, formatter: this.centeredTextFormatter, minWidth: 100,visible: false},
|
||||||
{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4nachname'))), field: 'nachname', headerFilter: true, formatter: this.centeredTextFormatter, minWidth: 100,visible: true},
|
{title: Vue.computed(() => this.$capitalize(this.$p.t('abgabetool/c4nachname'))), field: 'nachname', headerFilter: true, formatter: this.centeredTextFormatter, minWidth: 100,visible: true},
|
||||||
@@ -258,6 +248,77 @@ export const AbgabetoolMitarbeiter = {
|
|||||||
]};
|
]};
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
async openBenotung(type, link) {
|
||||||
|
if(type === 'new') {
|
||||||
|
window.open(link, '_blank')
|
||||||
|
} else if(type === 'old') {
|
||||||
|
if(await this.$fhcAlert.confirm({
|
||||||
|
message: this.$p.t('abgabetool/c4aeltereParbeitBenotenv2'),
|
||||||
|
acceptLabel: this.$capitalize(this.$p.t('abgabetool/c4AcceptAndProceed')),
|
||||||
|
acceptClass: 'btn btn-danger',
|
||||||
|
rejectLabel: this.$capitalize(this.$p.t('abgabetool/c4Cancel')),
|
||||||
|
rejectClass: 'btn btn-outline-secondary'
|
||||||
|
}) === false) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
window.open(link, '_blank')
|
||||||
|
} else {
|
||||||
|
// show info text that no endupload with abgabe has been found
|
||||||
|
if(await this.$fhcAlert.confirm({
|
||||||
|
message: this.$p.t('abgabetool/c4keinEnduploadErfolgt'),
|
||||||
|
acceptLabel: this.$capitalize(this.$p.t('abgabetool/c4AcceptAndProceed')),
|
||||||
|
acceptClass: 'btn btn-danger',
|
||||||
|
rejectLabel: this.$capitalize(this.$p.t('abgabetool/c4Cancel')),
|
||||||
|
rejectClass: 'btn btn-outline-secondary'
|
||||||
|
}) === false) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
formAction(cell) {
|
||||||
|
const actionButtons = document.createElement('div');
|
||||||
|
actionButtons.className = "d-flex gap-3";
|
||||||
|
actionButtons.style.display = "flex";
|
||||||
|
actionButtons.style.alignItems = "stretch";
|
||||||
|
actionButtons.style.justifyContent = "start";
|
||||||
|
actionButtons.style.height = "100%";
|
||||||
|
|
||||||
|
const val = cell.getValue();
|
||||||
|
const data = cell.getRow().getData()
|
||||||
|
|
||||||
|
const createButton = (iconClass, titleKey, clickHandler) => {
|
||||||
|
const btn = document.createElement('button');
|
||||||
|
btn.className = 'btn btn-outline-secondary';
|
||||||
|
btn.style.display = "flex";
|
||||||
|
btn.style.alignItems = "center"; // center icon vertically
|
||||||
|
btn.style.justifyContent = "center"; // center icon horizontally
|
||||||
|
btn.style.height = "100%"; // fill parent container height
|
||||||
|
btn.style.aspectRatio = "1 / 1"; // keep square shape (optional)
|
||||||
|
btn.style.padding = "0"; // remove extra padding for compactness
|
||||||
|
if(iconClass == 'fa fa-timeline') btn.style.transform = "rotate(90deg)";
|
||||||
|
btn.innerHTML = `<i class="${iconClass}" style="color:#00649C; font-size:1.1rem;"></i>`;
|
||||||
|
btn.title = this.$capitalize(this.$p.t(titleKey));
|
||||||
|
btn.addEventListener('click', (e) => {
|
||||||
|
e.stopPropagation();
|
||||||
|
e.stopImmediatePropagation();
|
||||||
|
clickHandler();
|
||||||
|
});
|
||||||
|
return btn;
|
||||||
|
};
|
||||||
|
|
||||||
|
actionButtons.append(
|
||||||
|
createButton('fa fa-folder-open', 'abgabetool/c4details', () => this.setDetailComponent(val)),
|
||||||
|
);
|
||||||
|
|
||||||
|
if(data.isCurrent && data.abgabetermine?.find(termin => termin.paabgabetyp_kurzbz == 'end' && termin.abgabedatum !== null) && data.beurteilungLinkNew) {
|
||||||
|
actionButtons.append(createButton('fa fa-user-check', 'abgabetool/c4benoten', () => this.openBenotung('new', data.beurteilungLinkNew)))
|
||||||
|
} else if(data.abgabetermine?.find(termin => termin.paabgabetyp_kurzbz == 'end' && termin.abgabedatum !== null) && data.beurteilungLinkOld) {
|
||||||
|
actionButtons.append(createButton('fa fa-user-check', 'abgabetool/c4benoten', () => this.openBenotung('old', data.beurteilungLinkOld)))
|
||||||
|
}
|
||||||
|
|
||||||
|
return actionButtons;
|
||||||
|
},
|
||||||
getDateStyleHtml(dateStyle) {
|
getDateStyleHtml(dateStyle) {
|
||||||
const iconMap = {
|
const iconMap = {
|
||||||
'verspaetet': '<i class="fa-solid fa-triangle-exclamation"></i>',
|
'verspaetet': '<i class="fa-solid fa-triangle-exclamation"></i>',
|
||||||
@@ -1281,7 +1342,8 @@ export const AbgabetoolMitarbeiter = {
|
|||||||
<FhcOverlay :active="loading || saving"></FhcOverlay>
|
<FhcOverlay :active="loading || saving"></FhcOverlay>
|
||||||
|
|
||||||
<bs-modal ref="modalContainerAddSeries" class="bootstrap-prompt"
|
<bs-modal ref="modalContainerAddSeries" class="bootstrap-prompt"
|
||||||
dialogClass="modal-lg">
|
dialogClass="modal-lg"
|
||||||
|
bodyClass="px-4 py-4">
|
||||||
<template v-slot:title>
|
<template v-slot:title>
|
||||||
<div>
|
<div>
|
||||||
{{ $p.t('abgabetool/neueTerminserie') }}
|
{{ $p.t('abgabetool/neueTerminserie') }}
|
||||||
@@ -1349,7 +1411,8 @@ export const AbgabetoolMitarbeiter = {
|
|||||||
|
|
||||||
<bs-modal ref="modalContainerAbgabeDetail" class="bootstrap-prompt"
|
<bs-modal ref="modalContainerAbgabeDetail" class="bootstrap-prompt"
|
||||||
dialogClass="modal-xl" :allowFullscreenExpand="true"
|
dialogClass="modal-xl" :allowFullscreenExpand="true"
|
||||||
@toggle-fullscreen="handleToggleFullscreenDetail">
|
@toggle-fullscreen="handleToggleFullscreenDetail"
|
||||||
|
bodyClass="px-4 py-4">
|
||||||
<template v-slot:title>
|
<template v-slot:title>
|
||||||
<div>
|
<div>
|
||||||
{{$p.t('abgabetool/c4abgabeMitarbeiterDetailTitle')}}
|
{{$p.t('abgabetool/c4abgabeMitarbeiterDetailTitle')}}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import AbgabeDetail from "./AbgabeStudentDetail.js";
|
import AbgabeDetail from "./AbgabeStudentDetail.js";
|
||||||
import ApiAbgabe from '../../../api/factory/abgabe.js'
|
import ApiAbgabe from '../../../api/factory/abgabe.js'
|
||||||
|
import ApiAuthinfo from '../../../api/factory/authinfo.js';
|
||||||
import BsModal from "../../Bootstrap/Modal.js";
|
import BsModal from "../../Bootstrap/Modal.js";
|
||||||
import FhcOverlay from "../../Overlay/FhcOverlay.js";
|
import FhcOverlay from "../../Overlay/FhcOverlay.js";
|
||||||
import { getDateStyleClass} from "./getDateStyleClass.js";
|
import { getDateStyleClass} from "./getDateStyleClass.js";
|
||||||
@@ -20,20 +21,14 @@ export const AbgabetoolStudent = {
|
|||||||
isViewMode: Vue.computed(() => this.isViewMode),
|
isViewMode: Vue.computed(() => this.isViewMode),
|
||||||
moodle_link: Vue.computed(() => this.moodle_link),
|
moodle_link: Vue.computed(() => this.moodle_link),
|
||||||
title_edit_allowed: Vue.computed(() => this.title_edit_allowed),
|
title_edit_allowed: Vue.computed(() => this.title_edit_allowed),
|
||||||
confetti_on_endupload: Vue.computed(() => this.confetti_on_endupload)
|
confetti_on_endupload: Vue.computed(() => this.confetti_on_endupload),
|
||||||
|
siginfolink_german: Vue.computed(() => this.siginfolink_german),
|
||||||
|
siginfolink_english: Vue.computed(() => this.siginfolink_english)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
props: {
|
props: {
|
||||||
student_uid_prop: {
|
student_uid_prop: {
|
||||||
default: null
|
default: null
|
||||||
},
|
|
||||||
viewData: {
|
|
||||||
type: Object,
|
|
||||||
required: true,
|
|
||||||
default: () => ({uid: ''}),
|
|
||||||
validator(value) {
|
|
||||||
return value && value.uid
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
@@ -50,8 +45,11 @@ export const AbgabetoolStudent = {
|
|||||||
moodle_link: null,
|
moodle_link: null,
|
||||||
title_edit_allowed: null,
|
title_edit_allowed: null,
|
||||||
confetti_on_endupload: null,
|
confetti_on_endupload: null,
|
||||||
|
siginfolink_german: null,
|
||||||
|
siginfolink_english: null,
|
||||||
editingTitel: '',
|
editingTitel: '',
|
||||||
editingProjektarbeit: null,
|
editingProjektarbeit: null,
|
||||||
|
uid: null
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
@@ -305,16 +303,18 @@ export const AbgabetoolStudent = {
|
|||||||
watch: {},
|
watch: {},
|
||||||
computed: {
|
computed: {
|
||||||
isViewMode() {
|
isViewMode() {
|
||||||
return this.student_uid !== this.viewData.uid
|
return this.student_uid !== this.uid
|
||||||
},
|
},
|
||||||
student_uid() {
|
student_uid() {
|
||||||
return this.student_uid_prop || this.viewData?.uid || null
|
return this.student_uid_prop || this.uid || null
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
async created() {
|
async created() {
|
||||||
// make sure zoom media query doesnt spill ever to other CIS4 sites
|
// make sure zoom media query doesnt spill ever to other CIS4 sites
|
||||||
document.documentElement.classList.add('abgabetool');
|
document.documentElement.classList.add('abgabetool');
|
||||||
|
|
||||||
|
this.$api.call(ApiAuthinfo.getAuthUID()).then(res => this.uid = res.data.uid)
|
||||||
|
|
||||||
this.phrasenPromise = this.$p.loadCategory(['abgabetool', 'global'])
|
this.phrasenPromise = this.$p.loadCategory(['abgabetool', 'global'])
|
||||||
this.phrasenPromise.then(()=> {this.phrasenResolved = true})
|
this.phrasenPromise.then(()=> {this.phrasenResolved = true})
|
||||||
|
|
||||||
@@ -341,6 +341,8 @@ export const AbgabetoolStudent = {
|
|||||||
this.moodle_link = res.data?.moodle_link
|
this.moodle_link = res.data?.moodle_link
|
||||||
this.title_edit_allowed = res.data?.title_edit_allowed
|
this.title_edit_allowed = res.data?.title_edit_allowed
|
||||||
this.confetti_on_endupload = res.data?.confetti_on_endupload
|
this.confetti_on_endupload = res.data?.confetti_on_endupload
|
||||||
|
this.siginfolink_german = res.data?.siginfolink_german
|
||||||
|
this.siginfolink_english = res.data?.siginfolink_english
|
||||||
}).catch(e => {
|
}).catch(e => {
|
||||||
this.loading = false
|
this.loading = false
|
||||||
})
|
})
|
||||||
@@ -356,7 +358,7 @@ export const AbgabetoolStudent = {
|
|||||||
<FhcOverlay :active="loading"></FhcOverlay>
|
<FhcOverlay :active="loading"></FhcOverlay>
|
||||||
|
|
||||||
<bs-modal ref="modalContainerAbgabeDetail" class="bootstrap-prompt"
|
<bs-modal ref="modalContainerAbgabeDetail" class="bootstrap-prompt"
|
||||||
dialogClass="modal-xl" :allowFullscreenExpand="true">
|
dialogClass="modal-xl" :allowFullscreenExpand="true" bodyClass="px-4 py-4">
|
||||||
<template v-slot:title>
|
<template v-slot:title>
|
||||||
<div>
|
<div>
|
||||||
{{$capitalize( $p.t('abgabetool/c4abgabeStudentDetailTitle') )}}
|
{{$capitalize( $p.t('abgabetool/c4abgabeStudentDetailTitle') )}}
|
||||||
@@ -373,6 +375,7 @@ export const AbgabetoolStudent = {
|
|||||||
ref="modalTitelEdit"
|
ref="modalTitelEdit"
|
||||||
class="bootstrap-prompt"
|
class="bootstrap-prompt"
|
||||||
dialogClass="bordered-modal"
|
dialogClass="bordered-modal"
|
||||||
|
bodyClass="px-4 py-4"
|
||||||
>
|
>
|
||||||
<template v-slot:title>
|
<template v-slot:title>
|
||||||
{{$capitalize( $p.t('abgabetool/c4titelBearbeiten') )}}
|
{{$capitalize( $p.t('abgabetool/c4titelBearbeiten') )}}
|
||||||
@@ -512,6 +515,15 @@ export const AbgabetoolStudent = {
|
|||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="row mt-2">
|
||||||
|
<div class="col-4 col-md-3 fw-bold">{{$capitalize( $p.t('abgabetool/c4note') )}}</div>
|
||||||
|
|
||||||
|
<div class="col-8 col-md-9">
|
||||||
|
<span>{{getNoteBezeichnung(projektarbeit)}}</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
</AccordionTab>
|
</AccordionTab>
|
||||||
</template>
|
</template>
|
||||||
</Accordion>
|
</Accordion>
|
||||||
|
|||||||
@@ -289,9 +289,8 @@ export default {
|
|||||||
},
|
},
|
||||||
updateProjektarbeit() {
|
updateProjektarbeit() {
|
||||||
this.$refs.projektarbeitDetails.updateProjektarbeit()
|
this.$refs.projektarbeitDetails.updateProjektarbeit()
|
||||||
.then((result) => {
|
.then(() => this.$refs.projektbetreuer.saveIfOpen())
|
||||||
this.projektarbeitSaved();
|
.then(() => this.projektarbeitSaved())
|
||||||
})
|
|
||||||
.catch(this.$fhcAlert.handleSystemError);
|
.catch(this.$fhcAlert.handleSystemError);
|
||||||
},
|
},
|
||||||
deleteProjektarbeit(projektarbeit_id) {
|
deleteProjektarbeit(projektarbeit_id) {
|
||||||
|
|||||||
+15
-10
@@ -297,17 +297,25 @@ export default {
|
|||||||
this.emptyBetreuerList();
|
this.emptyBetreuerList();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
saveProjektbetreuer() {
|
_doSaveBetreuer() {
|
||||||
this.$refs.formProjektbetreuer.call(
|
return this.$refs.formProjektbetreuer.call(
|
||||||
ApiStvProjektbetreuer.saveProjektbetreuer(this.projektarbeit_id, this.getFormDataWithBetreuer())
|
ApiStvProjektbetreuer.saveProjektbetreuer(this.projektarbeit_id, this.getFormDataWithBetreuer())
|
||||||
)
|
).then(result => {
|
||||||
.then(result => {
|
|
||||||
this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successSave'));
|
|
||||||
this.getProjektbetreuer(this.projektarbeit_id, this.studiensemester_kurzbz);
|
this.getProjektbetreuer(this.projektarbeit_id, this.studiensemester_kurzbz);
|
||||||
this.resetModes();
|
this.resetModes();
|
||||||
this.$emit('betreuerSaved');
|
this.$emit('betreuerSaved');
|
||||||
})
|
return result;
|
||||||
.catch(this.$fhcAlert.handleSystemError);
|
});
|
||||||
|
},
|
||||||
|
// called by combined save button
|
||||||
|
saveIfOpen() {
|
||||||
|
if (!this.betreuerFormOpened) return Promise.resolve(null);
|
||||||
|
return this._doSaveBetreuer();
|
||||||
|
},
|
||||||
|
saveProjektbetreuer() {
|
||||||
|
this._doSaveBetreuer()
|
||||||
|
.then(() => this.$fhcAlert.alertSuccess(this.$p.t('ui', 'successSave')))
|
||||||
|
.catch(this.$fhcAlert.handleSystemError);
|
||||||
},
|
},
|
||||||
searchBetreuer(event) {
|
searchBetreuer(event) {
|
||||||
if (this.abortController.betreuer) {
|
if (this.abortController.betreuer) {
|
||||||
@@ -539,9 +547,6 @@ export default {
|
|||||||
|
|
||||||
</form-form>
|
</form-form>
|
||||||
|
|
||||||
<button class="btn btn-primary" v-show="betreuerFormOpened" @click="saveProjektbetreuer">
|
|
||||||
{{ $p.t('projektarbeit', 'betreuerSpeichern') }}
|
|
||||||
</button>
|
|
||||||
<!-- <div class = "mt-5" v-if="beurteilungDownloadLink !== null">
|
<!-- <div class = "mt-5" v-if="beurteilungDownloadLink !== null">
|
||||||
<div class="mb-1">
|
<div class="mb-1">
|
||||||
<a :href="beurteilungDownloadLink" class="btn btn-primary d-block" :class="{ 'disabled' : beurteilungDownloadLink === ''}">
|
<a :href="beurteilungDownloadLink" class="btn btn-primary d-block" :class="{ 'disabled' : beurteilungDownloadLink === ''}">
|
||||||
|
|||||||
@@ -46921,6 +46921,26 @@ array(
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
|
array(
|
||||||
|
'app' => 'core',
|
||||||
|
'category' => 'abgabetool',
|
||||||
|
'phrase' => 'c4signaturinfo',
|
||||||
|
'insertvon' => 'system',
|
||||||
|
'phrases' => array(
|
||||||
|
array(
|
||||||
|
'sprache' => 'German',
|
||||||
|
'text' => 'Digitale Signatur Leitfaden',
|
||||||
|
'description' => '',
|
||||||
|
'insertvon' => 'system'
|
||||||
|
),
|
||||||
|
array(
|
||||||
|
'sprache' => 'English',
|
||||||
|
'text' => 'Guidelines for digital signatures',
|
||||||
|
'description' => '',
|
||||||
|
'insertvon' => 'system'
|
||||||
|
)
|
||||||
|
)
|
||||||
|
),
|
||||||
// ABGABETOOL PHRASEN END
|
// ABGABETOOL PHRASEN END
|
||||||
array(
|
array(
|
||||||
'app' => 'core',
|
'app' => 'core',
|
||||||
|
|||||||
Reference in New Issue
Block a user