Merge branch 'feature-69176/Studierendenverwaltung_Berichte' into studvw_2025-11_rc2

This commit is contained in:
Harald Bamberger
2025-11-20 13:35:01 +01:00
6 changed files with 155 additions and 3 deletions
@@ -183,6 +183,7 @@ class Verband extends FHCAPI_Controller
$this->StudiengangModel->addOrder('semester'); $this->StudiengangModel->addOrder('semester');
if ($org_form !== null) { if ($org_form !== null) {
$this->StudiengangModel->addSelect("v.orgform_kurzbz");
$this->StudiengangModel->db->group_start(); $this->StudiengangModel->db->group_start();
$this->StudiengangModel->db->where('v.semester', 0); $this->StudiengangModel->db->where('v.semester', 0);
$this->StudiengangModel->db->or_where('v.orgform_kurzbz', $org_form); $this->StudiengangModel->db->or_where('v.orgform_kurzbz', $org_form);
+4
View File
@@ -16,11 +16,15 @@
padding: .5rem 1rem; padding: .5rem 1rem;
text-decoration: none; text-decoration: none;
} }
.fhc-app-menu li a.disabled {
--bs-link-opacity: .5;
}
.fhc-app-menu li a.active, .fhc-app-menu li a.active,
.fhc-app-menu li a:hover { .fhc-app-menu li a:hover {
--bs-link-color-rgb: var(--bs-link-hover-color-rgb); --bs-link-color-rgb: var(--bs-link-hover-color-rgb);
background: var(--surface-hover); background: var(--surface-hover);
} }
.fhc-app-menu li a.disabled,
.fhc-app-menu li a.active { .fhc-app-menu li a.active {
pointer-events: none; pointer-events: none;
} }
+1
View File
@@ -64,5 +64,6 @@ export default {
{{ menu.description }} {{ menu.description }}
</a> </a>
</li> </li>
<slot />
</ul>` </ul>`
}; };
@@ -133,6 +133,8 @@ export default {
studiengangKz: undefined, studiengangKz: undefined,
studiengangKuerzel: '', studiengangKuerzel: '',
studiensemesterKurzbz: this.defaultSemester, studiensemesterKurzbz: this.defaultSemester,
selected_semester: undefined,
selected_orgform: undefined,
lists: { lists: {
nations: [], nations: [],
sprachen: [], sprachen: [],
@@ -141,6 +143,44 @@ export default {
verbandEndpoint: ApiStvVerband verbandEndpoint: ApiStvVerband
} }
}, },
computed: {
appMenuExtraItems() {
const extraItems = [];
if (this.studiengangKz !== undefined && this.selected_semester !== undefined) {
const studiengang_kz = String(this.studiengangKz);
const semester = String(this.selected_semester);
const orgform = this.selected_orgform || '';
extraItems.push({
link: FHC_JS_DATA_STORAGE_OBJECT.app_root
+ 'content/statistik/notenspiegel.php?type=xls'
+ '&studiengang_kz=' + studiengang_kz
+ '&semester=' + semester
+ '&orgform=' + orgform,
description: 'stv/grade_report_xls'
});
extraItems.push({
link: FHC_JS_DATA_STORAGE_OBJECT.app_root
+ 'content/statistik/notenspiegel_erweitert.php?typ=xls'
+ '&studiengang_kz=' + studiengang_kz
+ '&semester=' + semester
+ '&orgform=' + orgform,
description: 'stv/grade_report_xls_extended'
});
extraItems.push({
link: FHC_JS_DATA_STORAGE_OBJECT.app_root
+ 'content/statistik/notenspiegel.php?type=html'
+ '&studiengang_kz=' + studiengang_kz
+ '&semester=' + semester
+ '&orgform=' + orgform,
description: 'stv/grade_report_html'
});
}
return extraItems;
}
},
watch: { watch: {
'url_studiensemester_kurzbz': function (newVal, oldVal) { 'url_studiensemester_kurzbz': function (newVal, oldVal) {
if (newVal !== oldVal) { if (newVal !== oldVal) {
@@ -211,7 +251,7 @@ export default {
+ data.person_id + data.person_id
); );
}, },
onSelectVerband( {link, studiengang_kz}) { onSelectVerband({ link, studiengang_kz, semester, orgform_kurzbz }) {
let urlpath = String(link); let urlpath = String(link);
if (!urlpath.match(/\/prestudent/)) if (!urlpath.match(/\/prestudent/))
{ {
@@ -220,6 +260,8 @@ export default {
this.$refs.stvList.updateUrl(ApiStv.students.verband(urlpath)); this.$refs.stvList.updateUrl(ApiStv.students.verband(urlpath));
this.studiengangKz = studiengang_kz; this.studiengangKz = studiengang_kz;
this.selected_semester = semester;
this.selected_orgform = orgform_kurzbz;
const stg = this.lists.stgs.find((element) => { const stg = this.lists.stgs.find((element) => {
return (element.studiengang_kz === this.studiengangKz); return (element.studiengang_kz === this.studiengangKz);
}); });
@@ -511,7 +553,31 @@ export default {
<button type="button" class="btn-close text-reset" data-bs-dismiss="offcanvas" :aria-label="$p.t('ui/schliessen')"></button> <button type="button" class="btn-close text-reset" data-bs-dismiss="offcanvas" :aria-label="$p.t('ui/schliessen')"></button>
</div> </div>
<div class="offcanvas-body"> <div class="offcanvas-body">
<app-menu app-identifier="stv" /> <app-menu app-identifier="stv">
<li class="dropend">
<a
class="dropdown-toggle"
href="#"
role="button"
data-bs-toggle="dropdown"
aria-expanded="false"
:class="{ disabled: !appMenuExtraItems.length }"
data-bs-popper-config='{"strategy":"fixed"}'
>
{{ $p.t('stv/grade_report') }}
</a>
<ul class="dropdown-menu p-0">
<li
v-for="(item, key) in appMenuExtraItems"
:key="key"
>
<a class="dropdown-item" :href="item.link" target="_blank">
{{ $p.t(item.description) }}
</a>
</li>
</ul>
</li>
</app-menu>
</div> </div>
</aside> </aside>
<nav id="sidebarMenu" class="bg-light offcanvas offcanvas-start col-md p-md-0 h-100"> <nav id="sidebarMenu" class="bg-light offcanvas offcanvas-start col-md p-md-0 h-100">
@@ -128,7 +128,7 @@ export default {
}, },
onSelectTreeNode(node) { onSelectTreeNode(node) {
if (node.data.link) if (node.data.link)
this.$emit('selectVerband', {link: node.data.link, studiengang_kz: node.data.stg_kz}); this.$emit('selectVerband', {link: node.data.link, studiengang_kz: node.data.stg_kz, semester: node.data.semester, orgform_kurzbz: node.data.orgform_kurzbz});
}, },
mapNodesToNoSemReloadNodes(result, node) { mapNodesToNoSemReloadNodes(result, node) {
if (node.data.no_sem_reload) if (node.data.no_sem_reload)
+80
View File
@@ -39360,6 +39360,86 @@ array(
) )
) )
), ),
array(
'app' => 'core',
'category' => 'stv',
'phrase' => 'grade_report',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Notenspiegel',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Grade report',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'stv',
'phrase' => 'grade_report_xls',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Notenspiegel EXCEL',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Grade report EXCEL',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'stv',
'phrase' => 'grade_report_xls_extended',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Notenspiegel erweitert EXCEL',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Grade report extended EXCEL',
'description' => '',
'insertvon' => 'system'
)
)
),
array(
'app' => 'core',
'category' => 'stv',
'phrase' => 'grade_report_html',
'insertvon' => 'system',
'phrases' => array(
array(
'sprache' => 'German',
'text' => 'Notenspiegel HTML',
'description' => '',
'insertvon' => 'system'
),
array(
'sprache' => 'English',
'text' => 'Grade report HTML',
'description' => '',
'insertvon' => 'system'
)
)
),
array( array(
'app' => 'core', 'app' => 'core',
'category' => 'stv', 'category' => 'stv',