Loading hybrid/admin.py +18 −15 Changes for hybrid/admin.py: 18 added lines, 15 removed lines. Original line number Diff line number Diff line Loading @@ -14,7 +14,7 @@ from django.utils.decorators import method_decorator from elections.models import Election from voters.models import Voter from vote.models import Participation from .models import HybridElectionVoter, EnterHybridVotesElection from .models import IssueCards, EnterVotes from .forms import LocalVotesForm class ElectionContextFilter(admin.SimpleListFilter): Loading @@ -30,14 +30,14 @@ class ElectionContextFilter(admin.SimpleListFilter): val = self.value() return queryset.annotate(election_id=Value(val if val else "", output_field=CharField())) class HybridElectionVoterAdmin(admin.ModelAdmin): class IssueCardAdmin(admin.ModelAdmin): list_display = ['first_name', 'last_name', 'username', 'group', 'issue_card', 'card_issued_by'] exclude = ['token', 'token_generation_date', 'last_email_date'] search_fields = ['first_name', 'last_name', 'username', 'group'] list_filter = ['group', ElectionContextFilter] search_fields = ['first_name', 'last_name', 'username'] change_list_template = 'admin/hybrid_election_voter_list.html' change_list_template = 'admin/issue_card_list.html' def changelist_view(self, request, extra_context = None): extra_context = extra_context or {} Loading Loading @@ -101,11 +101,11 @@ class HybridElectionVoterAdmin(admin.ModelAdmin): if not election.is_hybrid or not election.is_active: messages.error(request, 'Kartę można wydać tylko dla trwających wyborów hybrydowych') return HttpResponseRedirect(reverse('admin:hybrid_hybridelectionvoter_changelist')+'?election_id='+str(election_id)) return HttpResponseRedirect(reverse('admin:hybrid_issuecards_changelist')+'?election_id='+str(election_id)) if Participation.objects.filter(election=election, voter=voter).exists(): messages.error(request, 'Ta osoba już zagłosowała w tych wyborach.') return HttpResponseRedirect(reverse('admin:hybrid_hybridelectionvoter_changelist')+'?election_id='+str(election_id)) return HttpResponseRedirect(reverse('admin:hybrid_issuecards_changelist')+'?election_id='+str(election_id)) if request.POST.get('post') == 'yes': Loading @@ -113,7 +113,7 @@ class HybridElectionVoterAdmin(admin.ModelAdmin): participation.save() messages.success(request, 'Pomyślnie zapisano wydanie karty') return HttpResponseRedirect(reverse('admin:hybrid_hybridelectionvoter_changelist')+'?election_id='+str(election_id)) return HttpResponseRedirect(reverse('admin:hybrid_issuecards_changelist')+'?election_id='+str(election_id)) context = admin.site.each_context(request) Loading @@ -135,8 +135,8 @@ class HybridElectionVoterAdmin(admin.ModelAdmin): def has_delete_permission(self, request, obj = None): return False class EnterHybridVotesElectionAdmin(admin.ModelAdmin): list_display = ['name', 'start_date', 'end_date', 'local_votes_action'] class EnterVotesAdmin(admin.ModelAdmin): list_display = ['name', 'local_votes_action'] ordering = ['-created_at', '-updated_at'] exclude = ['invalid_votes', 'local_votes_entered'] Loading Loading @@ -173,15 +173,15 @@ class EnterHybridVotesElectionAdmin(admin.ModelAdmin): if not election.is_hybrid or election.is_active: messages.error(request, 'Głosy stacjonarne można wprowadzić tylko dla zakończonych wyborów hybrydowych') return HttpResponseRedirect(reverse('admin:hybrid_enterhybridvoteselection_changelist')) return HttpResponseRedirect(reverse('admin:hybrid_entervotes_changelist')) if election.local_votes_entered: messages.error(request, 'Głosy stacjonarne zostały już wprowadzone dla tego głosowania') return HttpResponseRedirect(reverse('admin:hybrid_enterhybridvoteselection_changelist')) return HttpResponseRedirect(reverse('admin:hybrid_entervotes_changelist')) if request.POST.get('post') == 'yes': form = LocalVotesForm(request.POST, options_queryset=options_queryset, expected_votes_count=expected_votes_count) form = LocalVotesForm(request.POST, options_queryset=options_queryset, expected_votes_count=expected_votes_count, allow_invalid=election.allow_invalid) if form.is_valid(): for option in options_queryset: Loading @@ -191,14 +191,17 @@ class EnterHybridVotesElectionAdmin(admin.ModelAdmin): option.votes += votes option.save() if election.allow_invalid: election.invalid_votes += form.cleaned_data.get('option_invalid') election.local_votes_entered = True election.save() messages.success(request, 'Pomyślnie wprowadzono głosy stacjonarne') return HttpResponseRedirect(reverse('admin:hybrid_enterhybridvoteselection_changelist')) return HttpResponseRedirect(reverse('admin:hybrid_entervotes_changelist')) else: form = LocalVotesForm(options_queryset=options_queryset, expected_votes_count=expected_votes_count) form = LocalVotesForm(options_queryset=options_queryset, expected_votes_count=expected_votes_count, allow_invalid=election.allow_invalid) context = admin.site.each_context(request) context.update({ Loading @@ -219,5 +222,5 @@ class EnterHybridVotesElectionAdmin(admin.ModelAdmin): def has_delete_permission(self, request, obj = None): return False admin.site.register(HybridElectionVoter, HybridElectionVoterAdmin) admin.site.register(EnterHybridVotesElection, EnterHybridVotesElectionAdmin) No newline at end of file admin.site.register(IssueCards, IssueCardAdmin) admin.site.register(EnterVotes, EnterVotesAdmin) No newline at end of file hybrid/forms.py +11 −0 Changes for hybrid/forms.py: 11 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -5,12 +5,17 @@ class LocalVotesForm(forms.Form): def __init__(self, *args, **kwargs): self.options_queryset = kwargs.pop('options_queryset', []) self.expected_votes_count = kwargs.pop('expected_votes_count', 0) self.allow_invalid = kwargs.pop('allow_invalid', False) super().__init__(*args, **kwargs) for option in self.options_queryset: field_name = f'option_{option.id}' self.fields[field_name] = forms.IntegerField(label=option.name, initial=0, min_value=0, required=True, widget=forms.NumberInput(attrs={'class': 'form-control'})) if self.allow_invalid: self.fields['option_invalid'] = forms.IntegerField(label='GŁOS NIEWAŻNY', initial=0, min_value=0, required=True, widget=forms.NumberInput(attrs={'class': 'form-control'})) def clean(self): cleaned_data = super().clean() Loading @@ -23,6 +28,12 @@ class LocalVotesForm(forms.Form): if value is not None: entered_votes_count += value if self.allow_invalid: value = cleaned_data.get('option_invalid') if value is not None: entered_votes_count += value if entered_votes_count != self.expected_votes_count: raise ValidationError(f'Otrzymano {entered_votes_count} głosów, a oczekiwano {self.expected_votes_count}') Loading hybrid/models.py +2 −2 Changes for hybrid/models.py: 2 added lines, 2 removed lines. Original line number Diff line number Diff line Loading @@ -3,13 +3,13 @@ from django.db import models from voters.models import Voter from elections.models import Election class HybridElectionVoter(Voter): class IssueCards(Voter): class Meta: proxy = True verbose_name = 'Wydaj karty' verbose_name_plural = 'Wydawanie kart' class EnterHybridVotesElection(Election): class EnterVotes(Election): class Meta: proxy = True verbose_name = 'Wprowadź głosy stacjonarne' Loading hybrid/templates/admin/hybrid_election_voter_list.html→hybrid/templates/admin/issue_card_list.html +0 −0 File moved. View file Procfile +1 −1 File changed.Contains only whitespace changes. Show changes Loading
hybrid/admin.py +18 −15 Changes for hybrid/admin.py: 18 added lines, 15 removed lines. Original line number Diff line number Diff line Loading @@ -14,7 +14,7 @@ from django.utils.decorators import method_decorator from elections.models import Election from voters.models import Voter from vote.models import Participation from .models import HybridElectionVoter, EnterHybridVotesElection from .models import IssueCards, EnterVotes from .forms import LocalVotesForm class ElectionContextFilter(admin.SimpleListFilter): Loading @@ -30,14 +30,14 @@ class ElectionContextFilter(admin.SimpleListFilter): val = self.value() return queryset.annotate(election_id=Value(val if val else "", output_field=CharField())) class HybridElectionVoterAdmin(admin.ModelAdmin): class IssueCardAdmin(admin.ModelAdmin): list_display = ['first_name', 'last_name', 'username', 'group', 'issue_card', 'card_issued_by'] exclude = ['token', 'token_generation_date', 'last_email_date'] search_fields = ['first_name', 'last_name', 'username', 'group'] list_filter = ['group', ElectionContextFilter] search_fields = ['first_name', 'last_name', 'username'] change_list_template = 'admin/hybrid_election_voter_list.html' change_list_template = 'admin/issue_card_list.html' def changelist_view(self, request, extra_context = None): extra_context = extra_context or {} Loading Loading @@ -101,11 +101,11 @@ class HybridElectionVoterAdmin(admin.ModelAdmin): if not election.is_hybrid or not election.is_active: messages.error(request, 'Kartę można wydać tylko dla trwających wyborów hybrydowych') return HttpResponseRedirect(reverse('admin:hybrid_hybridelectionvoter_changelist')+'?election_id='+str(election_id)) return HttpResponseRedirect(reverse('admin:hybrid_issuecards_changelist')+'?election_id='+str(election_id)) if Participation.objects.filter(election=election, voter=voter).exists(): messages.error(request, 'Ta osoba już zagłosowała w tych wyborach.') return HttpResponseRedirect(reverse('admin:hybrid_hybridelectionvoter_changelist')+'?election_id='+str(election_id)) return HttpResponseRedirect(reverse('admin:hybrid_issuecards_changelist')+'?election_id='+str(election_id)) if request.POST.get('post') == 'yes': Loading @@ -113,7 +113,7 @@ class HybridElectionVoterAdmin(admin.ModelAdmin): participation.save() messages.success(request, 'Pomyślnie zapisano wydanie karty') return HttpResponseRedirect(reverse('admin:hybrid_hybridelectionvoter_changelist')+'?election_id='+str(election_id)) return HttpResponseRedirect(reverse('admin:hybrid_issuecards_changelist')+'?election_id='+str(election_id)) context = admin.site.each_context(request) Loading @@ -135,8 +135,8 @@ class HybridElectionVoterAdmin(admin.ModelAdmin): def has_delete_permission(self, request, obj = None): return False class EnterHybridVotesElectionAdmin(admin.ModelAdmin): list_display = ['name', 'start_date', 'end_date', 'local_votes_action'] class EnterVotesAdmin(admin.ModelAdmin): list_display = ['name', 'local_votes_action'] ordering = ['-created_at', '-updated_at'] exclude = ['invalid_votes', 'local_votes_entered'] Loading Loading @@ -173,15 +173,15 @@ class EnterHybridVotesElectionAdmin(admin.ModelAdmin): if not election.is_hybrid or election.is_active: messages.error(request, 'Głosy stacjonarne można wprowadzić tylko dla zakończonych wyborów hybrydowych') return HttpResponseRedirect(reverse('admin:hybrid_enterhybridvoteselection_changelist')) return HttpResponseRedirect(reverse('admin:hybrid_entervotes_changelist')) if election.local_votes_entered: messages.error(request, 'Głosy stacjonarne zostały już wprowadzone dla tego głosowania') return HttpResponseRedirect(reverse('admin:hybrid_enterhybridvoteselection_changelist')) return HttpResponseRedirect(reverse('admin:hybrid_entervotes_changelist')) if request.POST.get('post') == 'yes': form = LocalVotesForm(request.POST, options_queryset=options_queryset, expected_votes_count=expected_votes_count) form = LocalVotesForm(request.POST, options_queryset=options_queryset, expected_votes_count=expected_votes_count, allow_invalid=election.allow_invalid) if form.is_valid(): for option in options_queryset: Loading @@ -191,14 +191,17 @@ class EnterHybridVotesElectionAdmin(admin.ModelAdmin): option.votes += votes option.save() if election.allow_invalid: election.invalid_votes += form.cleaned_data.get('option_invalid') election.local_votes_entered = True election.save() messages.success(request, 'Pomyślnie wprowadzono głosy stacjonarne') return HttpResponseRedirect(reverse('admin:hybrid_enterhybridvoteselection_changelist')) return HttpResponseRedirect(reverse('admin:hybrid_entervotes_changelist')) else: form = LocalVotesForm(options_queryset=options_queryset, expected_votes_count=expected_votes_count) form = LocalVotesForm(options_queryset=options_queryset, expected_votes_count=expected_votes_count, allow_invalid=election.allow_invalid) context = admin.site.each_context(request) context.update({ Loading @@ -219,5 +222,5 @@ class EnterHybridVotesElectionAdmin(admin.ModelAdmin): def has_delete_permission(self, request, obj = None): return False admin.site.register(HybridElectionVoter, HybridElectionVoterAdmin) admin.site.register(EnterHybridVotesElection, EnterHybridVotesElectionAdmin) No newline at end of file admin.site.register(IssueCards, IssueCardAdmin) admin.site.register(EnterVotes, EnterVotesAdmin) No newline at end of file
hybrid/forms.py +11 −0 Changes for hybrid/forms.py: 11 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -5,12 +5,17 @@ class LocalVotesForm(forms.Form): def __init__(self, *args, **kwargs): self.options_queryset = kwargs.pop('options_queryset', []) self.expected_votes_count = kwargs.pop('expected_votes_count', 0) self.allow_invalid = kwargs.pop('allow_invalid', False) super().__init__(*args, **kwargs) for option in self.options_queryset: field_name = f'option_{option.id}' self.fields[field_name] = forms.IntegerField(label=option.name, initial=0, min_value=0, required=True, widget=forms.NumberInput(attrs={'class': 'form-control'})) if self.allow_invalid: self.fields['option_invalid'] = forms.IntegerField(label='GŁOS NIEWAŻNY', initial=0, min_value=0, required=True, widget=forms.NumberInput(attrs={'class': 'form-control'})) def clean(self): cleaned_data = super().clean() Loading @@ -23,6 +28,12 @@ class LocalVotesForm(forms.Form): if value is not None: entered_votes_count += value if self.allow_invalid: value = cleaned_data.get('option_invalid') if value is not None: entered_votes_count += value if entered_votes_count != self.expected_votes_count: raise ValidationError(f'Otrzymano {entered_votes_count} głosów, a oczekiwano {self.expected_votes_count}') Loading
hybrid/models.py +2 −2 Changes for hybrid/models.py: 2 added lines, 2 removed lines. Original line number Diff line number Diff line Loading @@ -3,13 +3,13 @@ from django.db import models from voters.models import Voter from elections.models import Election class HybridElectionVoter(Voter): class IssueCards(Voter): class Meta: proxy = True verbose_name = 'Wydaj karty' verbose_name_plural = 'Wydawanie kart' class EnterHybridVotesElection(Election): class EnterVotes(Election): class Meta: proxy = True verbose_name = 'Wprowadź głosy stacjonarne' Loading
hybrid/templates/admin/hybrid_election_voter_list.html→hybrid/templates/admin/issue_card_list.html +0 −0 File moved. View file