diff --git a/seminar/admin.py b/seminar/admin.py index 849ca696..3a12fb09 100644 --- a/seminar/admin.py +++ b/seminar/admin.py @@ -8,6 +8,7 @@ from polymorphic.admin import PolymorphicParentModelAdmin, PolymorphicChildModel from reversion.admin import VersionAdmin from django_reverse_admin import ReverseModelAdmin from solo.admin import SingletonModelAdmin +from django.utils.safestring import mark_safe # Todo: reversion @@ -23,33 +24,60 @@ class CisloForm(ModelForm): class Meta: model = m.Cislo fields = '__all__' - + def clean(self): - print("Cleaning...") - print(self.cleaned_data) if self.cleaned_data.get('verejne_db') == False: return self.cleaned_data cn = m.CisloNode.objects.get(cislo=self.instance) + errors = [] for ch in tl.all_children(cn): if isinstance(ch, m.TemaVCisleNode): if ch.tema.stav not in \ (m.Problem.STAV_ZADANY, m.Problem.STAV_VYRESENY): - raise ValidationError('Téma %(tema)s není zadané ani vyřešené', params={'tema':ch.tema}) + errors.append(ValidationError('Téma %(tema)s není zadané ani vyřešené', params={'tema':ch.tema})) if isinstance(ch, m.UlohaZadaniNode) or isinstance(ch, m.UlohaVzorakNode): if ch.uloha.stav not in \ (m.Problem.STAV_ZADANY, m.Problem.STAV_VYRESENY): - raise ValidationError('Úloha %(uloha)s není zadaná ani vyřešená', params={'uloha':ch.uloha}) + errors.append(ValidationError('Úloha %(uloha)s není zadaná ani vyřešená', params={'uloha':ch.uloha})) if isinstance(ch, m.ReseniNode): for problem in ch.reseni.problem_set: if problem not in \ (m.Problem.STAV_ZADANY, m.Problem.STAV_VYRESENY): - raise ValidationError('Problém %s není zadaný ani vyřešený', code=problem) + errors.append(ValidationError('Problém %s není zadaný ani vyřešený', code=problem)) + if errors: + errors.append(ValidationError(mark_safe('Pokud chceš učinit všechny problémy, co nejsou zadané ani vyřešené, zadanými a číslo zveřejnit, můžeš to udělat pomocí akce v seznamu čísel'))) + raise ValidationError(errors) return self.cleaned_data + @admin.register(m.Cislo) class CisloAdmin(admin.ModelAdmin): form = CisloForm + actions = ['force_publish'] + + def force_publish(self,request,queryset): + for cislo in queryset: + cn = m.CisloNode.objects.get(cislo=cislo) + for ch in tl.all_children(cn): + if isinstance(ch, m.TemaVCisleNode): + if ch.tema.stav not in (m.Problem.STAV_ZADANY, m.Problem.STAV_VYRESENY): + ch.tema.stav = m.Problem.STAV_ZADANY + ch.tema.save() + + if isinstance(ch, m.UlohaZadaniNode) or isinstance(ch, m.UlohaVzorakNode): + if ch.uloha.stav not in (m.Problem.STAV_ZADANY, m.Problem.STAV_VYRESENY): + ch.uloha.stav = m.Problem.STAV_ZADANY + ch.uloha.save() + if isinstance(ch, m.ReseniNode): + for problem in ch.reseni.problem_set: + if problem not in (m.Problem.STAV_ZADANY, m.Problem.STAV_VYRESENY): + problem.stav = m.Problem.STAV_ZADANY + problem.save() + cislo.verejne_db = True + cislo.save() + + force_publish.short_description = 'Zveřejnit vybraná čísla a všechny návrhy úloh v nich učinit zadanými' @admin.register(m.Osoba) class OsobaAdmin(admin.ModelAdmin):