• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

d120 / pyfeedback / 10619215239

29 Aug 2024 04:45PM UTC coverage: 89.236% (+0.01%) from 89.224%
10619215239

Pull #305

github

4-dash
removed extra whitespaces in admin.py
Pull Request #305: Updating dependencies

16 of 18 new or added lines in 7 files covered. (88.89%)

2 existing lines in 1 file now uncovered.

2545 of 2852 relevant lines covered (89.24%)

0.89 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

88.34
/src/feedback/admin.py
1
# coding=utf-8
2

3
from django.contrib import admin
1✔
4
from django import forms
1✔
5
from django.http.response import HttpResponseRedirect
1✔
6
from django.shortcuts import render
1✔
7

8
from feedback.models import Person, Veranstaltung, Semester, \
1✔
9
    Mailvorlage, Kommentar, Tutor, BarcodeScanner, BarcodeScannEvent, BarcodeAllowedState, \
10
    EmailEndung, Fragebogen2020, FragebogenUE2020, Ergebnis2020, Fragebogen2016, FragebogenUE2016, Ergebnis2016
11
from feedback.models.base import Log, Fachgebiet, FachgebietEmail
1✔
12

13

14
class PersonAdmin(admin.ModelAdmin):
1✔
15
    """Admin View für Personen"""
16
    list_display = ('__str__', 'email', 'fachgebiet')
1✔
17
    search_fields = ['vorname', 'nachname', 'email', ]
1✔
18
    list_filter = ('fachgebiet',)
1✔
19

20
    class FachgebietZuweisenForm(forms.Form):
1✔
21
        """Form für die Zuweisung von einem Fachgebiet für eine Person."""
22
        _selected_action = forms.CharField(widget=forms.MultipleHiddenInput)
1✔
23

24
    def assign_fachgebiet_action(self, request, queryset):
1✔
25
        """Definiert eine Admin-Action für die Fachgebietzuweisung."""
26
        form = None
1✔
27
        suggestion_list = []
1✔
28

29
        for p in queryset:
1✔
30
            proposed_fachgebiet = Fachgebiet.get_fachgebiet_from_email(p.email)
1✔
31
            suggestion_list.append((p, proposed_fachgebiet))
1✔
32

33
        if any(s in request.POST for s in ('apply', 'save')):
1✔
34
            form = self.FachgebietZuweisenForm(request.POST)
1✔
35

36
            if form.is_valid():
1✔
37
                selected_persons = request.POST.getlist("selectedPerson")
1✔
38
                for person in queryset:
1✔
39
                    person_id_str = str(person.id)
1✔
40
                    if person_id_str in selected_persons:
1✔
41
                        proposed_fachgebiet_id = request.POST.get("fachgebiet_" + person_id_str, 0)
1✔
42
                        if int(proposed_fachgebiet_id) > 0:
1✔
43
                            proposed_fachgebiet = Fachgebiet.objects.get(id=proposed_fachgebiet_id)
1✔
44
                            person.fachgebiet = proposed_fachgebiet
1✔
45
                            person.save()
1✔
46
                            suggestion_list = [(x, y) for x, y in suggestion_list if x is not person]
1✔
47

48
                self.message_user(request, "Fachgebiete erfolgreich zugewiesen.")
1✔
49

50
                if ('save' in request.POST) or not suggestion_list:
1✔
51
                    return HttpResponseRedirect(request.get_full_path())
1✔
52

53
        if not form:
1✔
54
            form = self.FachgebietZuweisenForm(initial={
1✔
55
                '_selected_action': queryset.values_list('id', flat=True)
56
            })
57

58
        return render(request, 'admin/fachgebiet.html', {'data': suggestion_list, 'fachgebiet': form, })
1✔
59

60
    assign_fachgebiet_action.short_description = "Einem Fachgebiet zuweisen"
1✔
61
    actions = [assign_fachgebiet_action]
1✔
62

63

64
class LogInline(admin.TabularInline):
1✔
65
    """Admin View für Log"""
66
    model = Log
1✔
67
    readonly_fields = ('veranstaltung', 'user', 'scanner', 'timestamp', 'status', 'interface')
1✔
68
    can_delete = False
1✔
69

70
    def has_add_permission(self, request, obj=None):
1✔
71
        return False
×
72

73

74
class VeranstaltungAdmin(admin.ModelAdmin):
1✔
75
    """Admin View für Veranstaltung"""
76
    fieldsets = [
1✔
77
        ('Stammdaten', {'fields':
78
                        ['typ', 'name', 'semester', 'status', 'lv_nr', 'grundstudium', 'evaluieren',
79
                         'veranstalter', 'link_veranstalter',
80
                         ]}),
81
        ('Bestellung', {'fields': ['sprache', 'anzahl', 'digitale_eval', 'digitale_eval_type', 'verantwortlich', 'ergebnis_empfaenger', 'primaerdozent',
82
                                   'auswertungstermin', 'freiefrage1', 'freiefrage2', 'kleingruppen', ]}),
83
    ]
84
    list_display = ('typ', 'name', 'semester', 'grundstudium', 'evaluieren', 'anzahl',
1✔
85
                    'sprache', 'status', 'veranstalter_list', 'digitale_eval', 'auswertungstermin')
86
    list_display_links = ['name']
1✔
87
    list_filter = ('typ', 'semester', 'status', 'grundstudium', 'evaluieren', 'sprache', 'digitale_eval', 'digitale_eval_type')
1✔
88
    search_fields = ['name']
1✔
89
    filter_horizontal = ('veranstalter', 'ergebnis_empfaenger')  # @see http://stackoverflow.com/a/5386871
1✔
90
    readonly_fields = ('link_veranstalter',)
1✔
91
    inlines = [LogInline, ]
1✔
92

93
    def save_model(self, request, obj, form, change):
1✔
94
        """Definiert eine Post-Save Operation."""
95
        super(VeranstaltungAdmin, self).save_model(request, obj, form, change)
×
96
        for changed_att in form.changed_data:
×
97
            # Wenn sich der Status ändert, wird es geloggt.
98
            if changed_att == "status":
×
99
                obj.log(request.user)
×
100

101
    class StatusAendernForm(forms.Form):
1✔
102
        """Definiert eine Form für Änderung einen Status'."""
103
        _selected_action = forms.CharField(widget=forms.MultipleHiddenInput)
1✔
104
        status = forms.ChoiceField(choices=Veranstaltung.STATUS_CHOICES)
1✔
105

106
    def status_aendern_action(self, request, queryset):
1✔
107
        """Beschreibt eine Admin-Action für die Statusänderung."""
108
        form = None
1✔
109

110
        if 'apply' in request.POST:
1✔
111
            form = self.StatusAendernForm(request.POST)
1✔
112

113
            if form.is_valid():
1✔
114
                status = form.cleaned_data['status']
1✔
115

116
                queryset.update(status=status)
1✔
117
                for veranstaltung in queryset:
1✔
118
                    veranstaltung.log(request.user)
1✔
119

120
                self.message_user(request, "Status erfolgreich geändert.")
1✔
121
                return HttpResponseRedirect(request.get_full_path())
1✔
122

123
        if not form:
1✔
124
            form = self.StatusAendernForm(initial={'_selected_action': queryset.values_list('id', flat=True)})
1✔
125

126
        return render(request, 'admin/status_aendern.html', {'veranstaltungen': queryset, 'status': form, })
1✔
127

128
    status_aendern_action.short_description = "Ändere den Status einer Veranstaltung"
1✔
129

130
    class KeineEvaluationForm(forms.Form):
1✔
131
        _selected_action = forms.CharField(widget=forms.MultipleHiddenInput)
1✔
132

133
    def keine_evaluation_action(self, request, queryset):
1✔
134
        """Beschreibt eine Admin-Action für die Option keine Evaluation."""
135
        form = None
×
136

137
        # Dieser Teil reicht bereits zum ändern aus. In diesem Fall können auch Zeile 146-149 gelöscht werden (Kein Bestätigungsfenster erscheint.
138
        if 'apply' in request.POST:
×
139
            queryset.update(status=Veranstaltung.STATUS_KEINE_EVALUATION_FINAL)
×
140
            queryset.update(evaluieren=False)
×
141
            for veranstaltung in queryset:
×
142
                veranstaltung.log(request.user)
×
143

144
            self.message_user(request, "Veranstaltungen wurden erfolgreich auf Keine Evaluation gesetzt.")
×
145
            return HttpResponseRedirect(request.get_full_path())
×
146
            # nach dem return landet Python in status_aendern_action
147
        if not form:
×
NEW
148
            form = self.KeineEvaluationForm(initial={'_selected_action': queryset.values_list('id', flat=True)})
×
149
        return render(request, 'admin/keine_evaluation.html', {'veranstaltungen': queryset, 'status': form, })
×
150

151
    keine_evaluation_action.short_description = "Keine Evaluation für diese Veranstaltung(en)"
1✔
152

153
    actions = [status_aendern_action, keine_evaluation_action]
1✔
154

155

156
class SemesterAdmin(admin.ModelAdmin):
1✔
157
    """Admin View für Semester"""
158
    list_display = ('__str__', 'sichtbarkeit', 'fragebogen')
1✔
159
    list_filter = ('sichtbarkeit', 'fragebogen')
1✔
160
    ordering = ('-semester',)
1✔
161

162

163
class MailvorlageAdmin(admin.ModelAdmin):
1✔
164
    """Admin View für Mailvorlage"""
165
    list_display = ('subject',)
1✔
166

167

168
class KommentarAdmin(admin.ModelAdmin):
1✔
169
    """Admin View für Kommentar"""
170
    list_display = ('typ', 'name', 'semester', 'autor')
1✔
171
    list_display_links = ('name',)
1✔
172

173

174
class TutorAdmin(admin.ModelAdmin):
1✔
175
    """Admin View für Tutor"""
176
    fieldsets = [
1✔
177
        ('Stammdaten', {'fields':
178
                        ['vorname', 'nachname', 'email',
179
                         ]}),
180
        ('Lehrveranstaltung', {'fields':
181
                               ['veranstaltung', 'nummer', 'anmerkung'
182
                                ]}),
183
    ]
184
    list_display = ('vorname', 'nachname', 'nummer', 'veranstaltung')
1✔
185
    search_fields = ('vorname', 'nachname')
1✔
186
    ordering = ('veranstaltung', 'nummer')
1✔
187

188
    def render_change_form(self, request, context, *args, **kwargs):
1✔
189
        # Limit Auswahl zum aktuellen Semester
190
        context['adminform'].form.fields['veranstaltung'].queryset = Veranstaltung.objects.filter(
×
191
            semester=Semester.current())
192
        return super(TutorAdmin, self).render_change_form(request, context, args, kwargs)
×
193

194

195
class BarcodeScannEventAdmin(admin.ModelAdmin):
1✔
196
    """Admin View für BarcodeScannEvent"""
197
    list_display = ('veranstaltung', 'timestamp',)
1✔
198
    readonly_fields = ('veranstaltung', 'timestamp',)
1✔
199

200

201
class BarcodeAllowedStateInline(admin.TabularInline):
1✔
202
    """Admin View für BarcodeAllowedState"""
203
    model = BarcodeAllowedState
1✔
204

205

206
class BarcodeScannerAdmin(admin.ModelAdmin):
1✔
207
    """Admin View für BarcodeScanner"""
208
    inlines = [
1✔
209
        BarcodeAllowedStateInline,
210
    ]
211
    list_display = ('token', 'description')
1✔
212

213

214
class FachgebietEmailAdminInline(admin.TabularInline):
1✔
215
    """Admin View für FachgebietEmail"""
216
    model = FachgebietEmail
1✔
217
    extra = 1
1✔
218

219

220
class FachgebietDomainAdminInline(admin.TabularInline):
1✔
221
    model = EmailEndung
1✔
222
    extra = 1
1✔
223

224

225
class FachgebietAdmin(admin.ModelAdmin):
1✔
226
    """Admin View für Fachgebiet"""
227
    list_display = ('name', 'kuerzel')
1✔
228
    list_display_links = ('name',)
1✔
229
    inlines = (FachgebietEmailAdminInline, FachgebietDomainAdminInline,)
1✔
230

231
    def save_related(self, request, form, formsets, change):
1✔
232
        super().save_related(request, form, formsets, change)
1✔
233
        if change:
1✔
234
            count_added = 0
1✔
235
            if EmailEndung.objects.filter(fachgebiet=form.instance).count() != 0:
1✔
236
                persons = Person.objects.filter(fachgebiet=None)
1✔
237
                for person in persons:
1✔
238
                    if not person.email:
1✔
239
                        continue
×
240
                    proposed_fachgebiet = Fachgebiet.get_fachgebiet_from_email(person.email)
1✔
241
                    if proposed_fachgebiet \
1✔
242
                            and proposed_fachgebiet.id == form.instance.id:
243
                        person.fachgebiet = proposed_fachgebiet
1✔
244
                        person.save()
1✔
245
                        count_added += 1
1✔
246
            if count_added > 0:
1✔
247
                self.message_user(request, "Dieses Fachgebiet wurde {0} Personen zugeordnet".format(count_added))
1✔
248

249

250
class FragebogenAdmin(admin.ModelAdmin):
1✔
251
    """Admin View für Ergebnis2020"""
252
    list_display = ('veranstaltung',)
1✔
253
    list_per_page = 500
1✔
254

255

256
admin.site.register(Person, PersonAdmin)
1✔
257
admin.site.register(Veranstaltung, VeranstaltungAdmin)
1✔
258
admin.site.register(Semester, SemesterAdmin)
1✔
259
admin.site.register(Fragebogen2020, FragebogenAdmin)
1✔
260
admin.site.register(FragebogenUE2020, FragebogenAdmin)
1✔
261
admin.site.register(Ergebnis2020, FragebogenAdmin)
1✔
262
admin.site.register(Fragebogen2016, FragebogenAdmin)
1✔
263
admin.site.register(FragebogenUE2016, FragebogenAdmin)
1✔
264
admin.site.register(Ergebnis2016, FragebogenAdmin)
1✔
265
admin.site.register(Mailvorlage, MailvorlageAdmin)
1✔
266
admin.site.register(Kommentar, KommentarAdmin)
1✔
267
admin.site.register(Tutor, TutorAdmin)
1✔
268
admin.site.register(BarcodeScannEvent, BarcodeScannEventAdmin)
1✔
269
admin.site.register(BarcodeScanner, BarcodeScannerAdmin)
1✔
270
admin.site.register(Fachgebiet, FachgebietAdmin)
1✔
271
admin.site.register(EmailEndung)
1✔
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc