- refactor sum points

- create green row background for current RT
This commit is contained in:
ma0068
2025-12-05 12:31:02 +01:00
parent 5a970c3f2e
commit e78482e947
3 changed files with 77 additions and 5 deletions
+6
View File
@@ -74,6 +74,12 @@ html.fs_huge {
color: var(--gray-500);
}
/* Aufnahme Termine: background color green*/
.stv-details-admission-table .row-green{
background-color: lightgreen !important;
//color: var(--green-200);
}
/* Dropdown Toolbar Interessent, submenu */
.dropend .dropdown-toggle.d-flex::after {
height: 0;
@@ -35,13 +35,49 @@ export default {
student: Object
},
data() {
let self = this;
return {
tabulatorOptions: {
ajaxURL: 'dummy',
ajaxRequestFunc: () => this.$api.call(
ApiStvAdmissionDates.getAufnahmetermine(this.student.person_id)
),
ajaxResponse: (url, params, response) => response.data,
ajaxResponse: (url, params, response) => {
const data = response.data;
const filtered = data.filter(item =>
item.studiengangkurzbzlang === this.student.studiengang ||
item.stg_kuerzel === this.student.studiengang
);
if (filtered.length > 0) {
filtered.sort((a, b) =>
this.parseSemester(b.studiensemester) - this.parseSemester(a.studiensemester)
);
self.youngestSemester = filtered[0].studiensemester;
} else {
self.youngestSemester = null;
}
return data;
},
rowFormatter: function(row) {
let data = row.getData(); // get data for this row
if (data.studiengangkurzbzlang == self.student.studiengang &&
data.studiensemester === self.youngestSemester) {
let cells = row.getCells();
cells.forEach((c) => {
c.getElement().classList.add("row-green");
}
);
}
},
dataLoaded: function() {
this.redraw(true);
},
columns: [
{title: "rt_id", field: "rt_id", visible: false},
{title: "rt_person_id", field: "rt_person_id", visible: false},
@@ -187,7 +223,8 @@ export default {
listPlacementTests: [],
listStudyPlans: [],
filterOnlyFutureTestsSet: false,
filteredPlacementTests: []
filteredPlacementTests: [],
youngestSemester: null
}
},
methods: {
@@ -331,6 +368,13 @@ export default {
resetForm() {
this.formData = {};
},
parseSemester(semester) {
const type = semester.slice(0, 2).toUpperCase(); // "WS" or "SS"
const year = parseInt(semester.slice(2), 10);
// WS > SS
return year * 10 + (type === 'SS' ? 1 : 2);
}
},
created() {
this.$api
@@ -49,12 +49,34 @@ export default {
.then(result => {
this.listAufnahmetermine = result.data;
//TODO(Manu) check logic Fas STG
const hasMatch = this.listAufnahmetermine
.some(item => item.studiengangkurzbzlang === this.student.studiengang);
if(!hasMatch){
this.formData.rt_gesamtpunkte = 0;
this.$fhcAlert.alertError("Studiengang nicht enthalten: " + this.student.studiengang);
return;
}
const listAufnahmetermineFiltered = this.listAufnahmetermine
.filter(item => item.studiengangkurzbzlang == this.student.studiengang)
.sort((a, b) => this.parseSemester(b.studiensemester) - this.parseSemester(a.studiensemester));
const elementSemYoungest = listAufnahmetermineFiltered[0];
this.formData.rt_gesamtpunkte = elementSemYoungest.punkte;
let pointsSemStg = 0;
if(listAufnahmetermineFiltered.length > 0){
const youngestSemester = listAufnahmetermineFiltered[0].studiensemester;
//sum of all rt-points of studiengang of youngest sem
pointsSemStg = listAufnahmetermineFiltered
.filter(item => item.studiensemester === youngestSemester)
.reduce((sum, item) => sum + (Number(item.punkte) || 0), 0);
}
else
pointsSemStg = 0;
this.formData.rt_gesamtpunkte = pointsSemStg;
})
.catch(this.$fhcAlert.handleSystemError);
@@ -91,7 +113,7 @@ export default {
},
template: `
<div class="stv-details-admission-header-placement h-100 pb-3">
<h4>{{ $p.t('lehre', 'studiengang') }}</h4>
<h4>{{ $p.t('lehre', 'studiengang') }}</h4> {{student.studiengang}}
<form-form class="mt-3" ref="formRtGesamtData" @submit.prevent>
<div v-if="showAufnahmegruppen" class="row mb-3">