Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion src/feedback/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
from feedback.models import Person, Veranstaltung, Semester, \
Mailvorlage, Kommentar, Tutor, BarcodeScanner, BarcodeScannEvent, BarcodeAllowedState, \
EmailEndung, Fragebogen2020, FragebogenUE2020, Ergebnis2020, Fragebogen2016, FragebogenUE2016, Ergebnis2016, \
Fragebogen2025, FragebogenUE2025, Ergebnis2025
Fragebogen2025, FragebogenUE2025, Ergebnis2025, FragebogenSE2025, ErgebnisSE2025
from feedback.models.base import Log, Fachgebiet, FachgebietEmail


Expand Down Expand Up @@ -258,6 +258,8 @@ class FragebogenAdmin(admin.ModelAdmin):
admin.site.register(Person, PersonAdmin)
admin.site.register(Veranstaltung, VeranstaltungAdmin)
admin.site.register(Semester, SemesterAdmin)
admin.site.register(FragebogenSE2025, FragebogenAdmin)
admin.site.register(ErgebnisSE2025, FragebogenAdmin)
admin.site.register(Fragebogen2025, FragebogenAdmin)
admin.site.register(FragebogenUE2025, FragebogenAdmin)
admin.site.register(Ergebnis2025, FragebogenAdmin)
Expand Down
106 changes: 106 additions & 0 deletions src/feedback/migrations/0058_ergebnisse2025_fragebogense2025.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
# Generated by Django 5.2.7 on 2025-11-22 23:20

import django.db.models.deletion
from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('feedback', '0057_rename_v_7_5_ergebnis2025_v_8_1_and_more'),
]

operations = [
migrations.CreateModel(
name='ErgebnisSE2025',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('anzahl', models.PositiveIntegerField()),
('s_didaktik', models.FloatField(blank=True, null=True)),
('s_didaktik_count', models.PositiveIntegerField(default=0)),
('s_organisation', models.FloatField(blank=True, null=True)),
('s_organisation_count', models.PositiveIntegerField(default=0)),
('s_praxisbezug_motivation', models.FloatField(blank=True, null=True)),
('s_praxisbezug_motivation_count', models.PositiveIntegerField(default=0)),
('s_digitale_lehre', models.FloatField(blank=True, null=True)),
('s_digitale_lehre_count', models.PositiveIntegerField(default=0)),
('s_9_5', models.FloatField(blank=True, null=True)),
('s_9_5_count', models.PositiveIntegerField(default=0)),
('s_feedbackpreis', models.FloatField(blank=True, null=True)),
('s_feedbackpreis_count', models.PositiveIntegerField(default=0)),
('gesamt', models.FloatField(blank=True, null=True)),
('gesamt_count', models.PositiveIntegerField(default=0)),
('veranstaltung', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to='feedback.veranstaltung')),
],
options={
'verbose_name': 'Seminarergebnis 2025',
'verbose_name_plural': 'Seminarergebnisse 2025',
'ordering': ['veranstaltung'],
},
),
migrations.CreateModel(
name='FragebogenSE2025',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('fach', models.CharField(blank=True, choices=[('inf', 'Informatik'), ('math', 'Mathematik'), ('ce', 'Computational Engineering'), ('ist', 'Informationssystemtechnik'), ('etit', 'Elektrotechnik'), ('psyit', 'Psychologie in IT'), ('winf', 'Wirtschaftsinformatik'), ('sonst', 'etwas anderes')], max_length=5)),
('abschluss', models.CharField(blank=True, choices=[('bsc', 'Bachelor'), ('msc', 'Master'), ('dipl', 'Diplom'), ('lehr', 'Lehramt'), ('sonst', 'anderer Abschluss')], max_length=5)),
('semester', models.CharField(blank=True, choices=[('1', '1'), ('2', '2'), ('3', '3'), ('4', '4'), ('5', '5'), ('6', '6'), ('7', '7'), ('8', '8'), ('9', '9'), ('10', '>=10')], max_length=4)),
('geschlecht', models.CharField(blank=True, choices=[('w', 'weiblich'), ('m', 'männlich'), ('s', 'sonstiges')], max_length=1)),
('studienberechtigung', models.CharField(blank=True, choices=[('d', 'Deutschland'), ('o', 'anderes Land')], max_length=1)),
('male_veranstaltung_gehoert', models.CharField(blank=True, choices=[('1', '1'), ('2', '2'), ('3', '3'), ('4', '<=4')], max_length=1)),
('s_wie_oft_besucht', models.PositiveSmallIntegerField(blank=True, null=True)),
('s_besuch_ueberschneidung', models.CharField(blank=True, choices=[('j', 'ja'), ('n', 'nein')], max_length=1)),
('s_besuch_qualitaet', models.CharField(blank=True, choices=[('j', 'ja'), ('n', 'nein')], max_length=1)),
('s_besuch_verhaeltnisse', models.CharField(blank=True, choices=[('j', 'ja'), ('n', 'nein')], max_length=1)),
('s_besuch_privat', models.CharField(blank=True, choices=[('j', 'ja'), ('n', 'nein')], max_length=1)),
('s_besuch_elearning', models.CharField(blank=True, choices=[('j', 'ja'), ('n', 'nein')], max_length=1)),
('s_besuch_zufrueh', models.CharField(blank=True, choices=[('j', 'ja'), ('n', 'nein')], max_length=1)),
('s_besuch_sonstiges', models.CharField(blank=True, choices=[('j', 'ja'), ('n', 'nein')], max_length=1)),
('s_3_1', models.PositiveSmallIntegerField(blank=True, null=True)),
('s_3_2', models.PositiveSmallIntegerField(blank=True, null=True)),
('s_3_3', models.PositiveSmallIntegerField(blank=True, null=True)),
('s_3_4', models.PositiveSmallIntegerField(blank=True, null=True)),
('s_3_6', models.PositiveSmallIntegerField(blank=True, null=True)),
('s_3_7', models.PositiveSmallIntegerField(blank=True, null=True)),
('s_3_8', models.PositiveSmallIntegerField(blank=True, null=True)),
('s_3_9', models.PositiveSmallIntegerField(blank=True, null=True)),
('s_3_10', models.PositiveSmallIntegerField(blank=True, null=True)),
('s_4_1', models.CharField(blank=True, choices=[('j', 'ja'), ('n', 'nein')], max_length=1)),
('s_4_2', models.PositiveSmallIntegerField(blank=True, null=True)),
('s_4_3', models.PositiveSmallIntegerField(blank=True, null=True)),
('s_4_4', models.PositiveSmallIntegerField(blank=True, null=True)),
('s_4_5', models.PositiveSmallIntegerField(blank=True, null=True)),
('s_4_6', models.CharField(blank=True, choices=[('0', '0'), ('1', '0.5'), ('2', '1'), ('3', '2'), ('4', '3'), ('5', '4'), ('6', '5'), ('7', '>=5')], max_length=1)),
('s_5_1', models.CharField(blank=True, choices=[('j', 'ja'), ('n', 'nein')], max_length=1)),
('s_5_2', models.PositiveSmallIntegerField(blank=True, null=True)),
('s_5_3', models.PositiveSmallIntegerField(blank=True, null=True)),
('s_5_4', models.PositiveSmallIntegerField(blank=True, null=True)),
('s_5_5', models.PositiveSmallIntegerField(blank=True, null=True)),
('s_5_6', models.PositiveSmallIntegerField(blank=True, null=True)),
('s_5_7', models.CharField(blank=True, choices=[('0', '0'), ('1', '0.5'), ('2', '1'), ('3', '2'), ('4', '3'), ('5', '4'), ('6', '5'), ('7', '>=5')], max_length=1)),
('s_6_1', models.PositiveSmallIntegerField(blank=True, null=True)),
('s_6_2', models.PositiveSmallIntegerField(blank=True, null=True)),
('s_6_3', models.PositiveSmallIntegerField(blank=True, null=True)),
('s_6_4', models.PositiveSmallIntegerField(blank=True, null=True)),
('s_6_5', models.PositiveSmallIntegerField(blank=True, null=True)),
('s_6_6', models.PositiveSmallIntegerField(blank=True, null=True)),
('s_6_7', models.PositiveSmallIntegerField(blank=True, null=True)),
('s_6_8', models.PositiveSmallIntegerField(blank=True, null=True)),
('s_6_9', models.PositiveSmallIntegerField(blank=True, null=True)),
('s_6_10', models.PositiveSmallIntegerField(blank=True, null=True)),
('s_7_1', models.PositiveSmallIntegerField(blank=True, null=True)),
('s_7_2', models.PositiveSmallIntegerField(blank=True, null=True)),
('s_9_1', models.CharField(blank=True, choices=[('h', 'zu hoch'), ('n', 'zu niedrig')], max_length=1)),
('s_9_2', models.CharField(blank=True, choices=[('h', 'zu hoch'), ('n', 'zu niedrig')], max_length=1)),
('s_9_3', models.CharField(blank=True, choices=[('h', 'zu hoch'), ('n', 'zu niedrig')], max_length=1)),
('s_9_4', models.PositiveSmallIntegerField(blank=True, null=True)),
('s_9_5', models.PositiveSmallIntegerField(blank=True, null=True)),
('veranstaltung', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='feedback.veranstaltung')),
],
options={
'verbose_name': 'Seminarfragebogen 2025',
'verbose_name_plural': 'Seminarfragebögen 2025',
'ordering': ['semester', 'veranstaltung'],
},
),
]
18 changes: 18 additions & 0 deletions src/feedback/migrations/0059_fragebogense2025_s_3_5.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Generated by Django 5.2.7 on 2025-11-30 23:29

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('feedback', '0058_ergebnisse2025_fragebogense2025'),
]

operations = [
migrations.AddField(
model_name='fragebogense2025',
name='s_3_5',
field=models.PositiveSmallIntegerField(blank=True, null=True),
),
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# Generated by Django 5.2.7 on 2025-12-01 00:31

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('feedback', '0059_fragebogense2025_s_3_5'),
]

operations = [
migrations.AlterField(
model_name='fragebogense2025',
name='s_9_1',
field=models.PositiveSmallIntegerField(blank=True, null=True),
),
migrations.AlterField(
model_name='fragebogense2025',
name='s_9_2',
field=models.PositiveSmallIntegerField(blank=True, null=True),
),
migrations.AlterField(
model_name='fragebogense2025',
name='s_9_3',
field=models.PositiveSmallIntegerField(blank=True, null=True),
),
]
21 changes: 19 additions & 2 deletions src/feedback/models/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,21 @@
from feedback.models.fragebogenUE2020 import FragebogenUE2020
from feedback.models.fragebogen2025 import Fragebogen2025, Ergebnis2025
from feedback.models.fragebogenUE2025 import FragebogenUE2025
from feedback.models.fragebogenSE2025 import FragebogenSE2025, ErgebnisSE2025
from django.core.exceptions import ObjectDoesNotExist

from django.db.models import Q


def get_model(model, semester):
mod = '%s.fragebogen%s' % (__name__, semester.fragebogen)
def get_model(model, semester, is_seminar=False):
if not is_seminar :
mod = '%s.fragebogen%s' % (__name__, semester.fragebogen)
else :
mod = '%s.fragebogenSE%s' % (__name__, semester.fragebogen)

if is_seminar :
model = model + "SE"

cls = '%s%s' % (model, semester.fragebogen)
module = __import__(mod, fromlist=(cls,))
return getattr(module, cls)
Expand All @@ -33,6 +41,15 @@ def get_model_string(model, semester):
return getattr(module, cls)


def semester_has_seminar_model(semester: Semester) :
"""
check if given semester has a seminar model
"""
SEMINAR_YEARS_LIST = ["2025",]

return True if semester.fragebogen in SEMINAR_YEARS_LIST else False


def long_not_ordert():
"""Alle Veranstaltungen die schon länger nicht mehr evaluiert wurden"""
# suche nach allen Veranstaltungen aus dem aktellen Semester bei denen
Expand Down
2 changes: 1 addition & 1 deletion src/feedback/models/fragebogen2025.py
Original file line number Diff line number Diff line change
Expand Up @@ -173,12 +173,12 @@ class Ergebnis2025(Ergebnis):
[
'3.2 Die Vorlesungsmaterialien (Folien, Skripte, Tafelanschrieb, Lehrbücher,e-Learning, etc.) haben das Lernen wirkungsvoll unterstützt.',
'3.6 Der Lehrende war auch außerhalb der Veranstaltung ansprechbar.',
'3.8 Die Vorlesung motivierte dazu, sich außerhalb der Veranstaltungselbstständig mit den behandelten Themen auseinander zu setzen.', # not in fragebogen?
'4.4 Die Vorlesung war inhaltlich gut strukturiert, ein roter Faden war erkennbar.',
'4.6 Der Stoff wurde anhand von Beispielen verdeutlicht.',
'4.7 Der Bezug zwischen Theorie und praktischem Arbeiten / praktischen Anwendungen wurde hergestellt.',
'5.2 Die Lehrkraft hat Kompliziertes verständlich dargelegt.',
'5.4 Die Lernziele der Veranstaltung sind mir klar geworden.',
'5.5 Die Vorlesung motivierte dazu, sich außerhalb der Veranstaltungselbstständig mit den behandelten Themen auseinander zu setzen.',
'6.1 Der Lehrende regte gezielt zur eigenen Mitarbeit / zum Mitdenken in der Veranstaltung an.',
'6.2 Die (Zwischen-)Fragen der Studierenden wurden angemessen beantwortet.',
'6.3 Die Lehrkraft zeigte sich gut vorbereitet.',
Expand Down
Loading