From fe7c4f601513c2045d58612918e7b1c82b371883 Mon Sep 17 00:00:00 2001 From: LEdoian Date: Wed, 6 Feb 2019 01:44:30 +0100 Subject: [PATCH 01/13] =?UTF-8?q?V=C3=BDsledkovka:=20V=C3=ADce=20=C5=99e?= =?UTF-8?q?=C5=A1en=C3=AD=20ke=20stejn=C3=A9mu=20=C5=99e=C5=A1iteli=20a=20?= =?UTF-8?q?=C4=8D=C3=ADslu?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Například: nějaké nepravidelné získání bodů (DOD), pozdní dodání starého řešení, několik příspěvků ke stejnému témátku, ... --- seminar/views.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/seminar/views.py b/seminar/views.py index 25d72f7f..16a0e872 100644 --- a/seminar/views.py +++ b/seminar/views.py @@ -319,8 +319,10 @@ def vysledkovka_rocniku(rocnik, jen_verejne=True): #zobrazim jen je-li vysledkovka verejna body_za_cislo = VysledkyZaCislo.objects.filter(cislo__rocnik=rocnik).filter(cislo = cis).filter(resitel = v.resitel) if body_za_cislo: - #neprazdne vysledky by mely obsahovat prave jeden vysledek - v.body_cisla.append(body_za_cislo[0].body) + soucet = 0.0 + for x in body_za_cislo: + soucet += x.body + v.body_cisla.append(soucet) else: #resitel nema za cislo body v.body_cisla.append(0) From ce5884914891c43b04d01f3c6c5714544ade54d5 Mon Sep 17 00:00:00 2001 From: MaM Web user Date: Wed, 6 Feb 2019 02:33:05 +0100 Subject: [PATCH 02/13] =?UTF-8?q?Revert=20"V=C3=BDsledkovka:=20V=C3=ADce?= =?UTF-8?q?=20=C5=99e=C5=A1en=C3=AD=20ke=20stejn=C3=A9mu=20=C5=99e=C5=A1it?= =?UTF-8?q?eli=20a=20=C4=8D=C3=ADslu"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit fe7c4f601513c2045d58612918e7b1c82b371883. Změnil jsem špatný kód a navíc nefungoval --- seminar/views.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/seminar/views.py b/seminar/views.py index 16a0e872..25d72f7f 100644 --- a/seminar/views.py +++ b/seminar/views.py @@ -319,10 +319,8 @@ def vysledkovka_rocniku(rocnik, jen_verejne=True): #zobrazim jen je-li vysledkovka verejna body_za_cislo = VysledkyZaCislo.objects.filter(cislo__rocnik=rocnik).filter(cislo = cis).filter(resitel = v.resitel) if body_za_cislo: - soucet = 0.0 - for x in body_za_cislo: - soucet += x.body - v.body_cisla.append(soucet) + #neprazdne vysledky by mely obsahovat prave jeden vysledek + v.body_cisla.append(body_za_cislo[0].body) else: #resitel nema za cislo body v.body_cisla.append(0) From 028e249df2eda4d0f7b6a12c6aec4401d724c741 Mon Sep 17 00:00:00 2001 From: MaM Web user Date: Wed, 6 Feb 2019 04:51:12 +0100 Subject: [PATCH 03/13] =?UTF-8?q?V=C3=BDsledkovka:=20Sou=C4=8Det=20bod?= =?UTF-8?q?=C5=AF=20=C5=99e=C5=A1en=C3=AD=20ke=20stejn=C3=A9mu=20probl?= =?UTF-8?q?=C3=A9mu?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Dosud se součet za číslo sečetl správně, ale body u problému byly jen z posledního zpracovaného řešení. Tohle je potřeba na: DODové úložky, více článků ke stejnému témátku (třeba postupně během jednoho čísla), opožděné submity, ... Pavel --- seminar/views.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/seminar/views.py b/seminar/views.py index 25d72f7f..55e8aa7a 100644 --- a/seminar/views.py +++ b/seminar/views.py @@ -491,7 +491,12 @@ class CisloView(generic.DetailView): # za každé řešení doplníme k příslušnému řešiteli a úloze body for r in reseni: - vysledky_resitele[r.resitel.id].body_ulohy[problem_index[r.problem.id]] = r.body + if r.body is None or vysledky_resitele[r.resitel.id].body_ulohy[problem_index[r.problem.id]] is None: + vysledky_resitele[r.resitel.id].body_ulohy[problem_index[r.problem.id]] = None + elif vysledky_resitele[r.resitel.id].body_ulohy[problem_index[r.problem.id]] == '': + vysledky_resitele[r.resitel.id].body_ulohy[problem_index[r.problem.id]] = r.body + else: + vysledky_resitele[r.resitel.id].body_ulohy[problem_index[r.problem.id]] += r.body context['vysledkovka'] = vysledkovka context['problemy'] = problemy From 5e9bdbfef08953441187ed501f2e40e0d7fcc9be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Domes?= Date: Tue, 5 Mar 2019 20:52:09 +0100 Subject: [PATCH 04/13] =?UTF-8?q?Zm=C4=9Bna=20obr=C3=A1zk=C5=AF=20v=20?= =?UTF-8?q?=C3=BAvodn=C3=ADm=20grafu?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/templates/seminar/titulnistrana.html | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/seminar/templates/seminar/titulnistrana.html b/seminar/templates/seminar/titulnistrana.html index d73e65e3..a9f3df66 100644 --- a/seminar/templates/seminar/titulnistrana.html +++ b/seminar/templates/seminar/titulnistrana.html @@ -39,19 +39,19 @@ M&M je korespondenční seminář. Několikrát do roka zdarma vydáváme č - - - + + + - - - + + + - + From d2367d28fb33b4dcdf2895b8e4bf95bbaabc328a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Domes?= Date: Tue, 5 Mar 2019 21:09:14 +0100 Subject: [PATCH 05/13] =?UTF-8?q?Oprava=20rozbit=C3=BDch=20p=C5=99=C3=ADpo?= =?UTF-8?q?n=20obr=C3=A1zk=C5=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/templates/seminar/titulnistrana.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/seminar/templates/seminar/titulnistrana.html b/seminar/templates/seminar/titulnistrana.html index a9f3df66..3134de45 100644 --- a/seminar/templates/seminar/titulnistrana.html +++ b/seminar/templates/seminar/titulnistrana.html @@ -51,11 +51,11 @@ M&M je korespondenční seminář. Několikrát do roka zdarma vydáváme č - + - + From ec8ac3e3093fca287954bf174e6dbcf79d7721dd Mon Sep 17 00:00:00 2001 From: LEdoian Date: Wed, 6 Mar 2019 00:52:34 +0100 Subject: [PATCH 06/13] =?UTF-8?q?Galerie:=20Mo=C5=BEnost=20=C3=BApravy=20p?= =?UTF-8?q?o=C5=99ad=C3=AD=20fotek?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- galerie/admin.py | 6 +++--- galerie/views.py | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/galerie/admin.py b/galerie/admin.py index 8e9c1897..6bae43ac 100644 --- a/galerie/admin.py +++ b/galerie/admin.py @@ -31,20 +31,20 @@ def prepnout_fotogalerii_do_org_rezimu(modeladmin, request, queryset): class GalerieInline(admin.TabularInline): model = Obrazek - fields = ['obrazek_velky', 'nazev', 'popis', 'obrazek_maly_tag'] + fields = ['obrazek_velky', 'nazev', 'popis', 'obrazek_maly_tag', 'poradi'] readonly_fields = ['nazev', 'obrazek_maly_tag'] formfield_overrides = { models.TextField: {'widget': forms.TextInput}, } class ObrazekAdmin(admin.ModelAdmin): - list_display = ('obrazek_velky', 'nazev', 'popis', 'obrazek_maly_tag') + list_display = ('obrazek_velky', 'nazev', 'popis', 'obrazek_maly_tag', 'poradi') class GalerieAdmin(admin.ModelAdmin): form = autocomplete_light.modelform_factory(Galerie, autocomplete_fields=['titulni_obrazek'], fields=['titulni_obrazek']) model = Galerie fields = ('zobrazit', 'nazev', 'titulni_obrazek', 'popis', 'galerie_up', 'soustredeni', 'poradi') - list_display = ('nazev', 'pk', 'poradi', 'datum_zmeny', 'zobrazit', 'soustredeni') + list_display = ('nazev', 'pk', 'poradi', 'datum_zmeny', 'zobrazit', 'soustredeni', 'poradi') inlines = [GalerieInline] actions = [zverejnit_fotogalerii, prepnout_fotogalerii_do_org_rezimu] save_on_top = True diff --git a/galerie/views.py b/galerie/views.py index 46860810..f7ace3c8 100644 --- a/galerie/views.py +++ b/galerie/views.py @@ -38,7 +38,7 @@ def nahled(request, pk, soustredeni): if not request.user.is_staff: podgalerie = podgalerie.filter(zobrazit__lt=1) - obrazky = Obrazek.objects.filter(galerie = galerie) + obrazky = Obrazek.objects.filter(galerie = galerie).order_by('poradi') preview = zobrazit(galerie, request) sourozenci = [] @@ -82,7 +82,7 @@ def detail(request, pk, fotka, soustredeni): galerie = get_object_or_404(Galerie, pk=pk) preview = zobrazit(galerie, request) obrazek = get_object_or_404(Obrazek, pk=fotka) - obrazky = galerie.obrazek_set.all() + obrazky = galerie.obrazek_set.all().order_by('poradi') # vytvoreni a obslouzeni formulare if request.method == 'POST': From aba3fa356b40ccfe639c40d16eb1c00aef2c0b58 Mon Sep 17 00:00:00 2001 From: LEdoian Date: Wed, 6 Mar 2019 01:13:55 +0100 Subject: [PATCH 07/13] =?UTF-8?q?Galerie:=20Ale=20sta=C4=8D=C3=AD=20zobraz?= =?UTF-8?q?it=20po=C5=99ad=C3=AD=20jednou=20:-)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- galerie/admin.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/galerie/admin.py b/galerie/admin.py index 6bae43ac..784d4aa8 100644 --- a/galerie/admin.py +++ b/galerie/admin.py @@ -44,7 +44,7 @@ class GalerieAdmin(admin.ModelAdmin): form = autocomplete_light.modelform_factory(Galerie, autocomplete_fields=['titulni_obrazek'], fields=['titulni_obrazek']) model = Galerie fields = ('zobrazit', 'nazev', 'titulni_obrazek', 'popis', 'galerie_up', 'soustredeni', 'poradi') - list_display = ('nazev', 'pk', 'poradi', 'datum_zmeny', 'zobrazit', 'soustredeni', 'poradi') + list_display = ('nazev', 'pk', 'poradi', 'datum_zmeny', 'zobrazit', 'soustredeni') inlines = [GalerieInline] actions = [zverejnit_fotogalerii, prepnout_fotogalerii_do_org_rezimu] save_on_top = True From 2cd5294754e2bf7e5b84525702eedcf9bc5dd289 Mon Sep 17 00:00:00 2001 From: LEdoian Date: Wed, 13 Mar 2019 18:41:28 +0100 Subject: [PATCH 08/13] =?UTF-8?q?Organizator:=20Lep=C5=A1=C3=AD=20zp=C5=AF?= =?UTF-8?q?sob=20=C5=99azen=C3=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/models.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/seminar/models.py b/seminar/models.py index 2bc86c41..e3c89ab8 100644 --- a/seminar/models.py +++ b/seminar/models.py @@ -758,6 +758,10 @@ class Organizator(models.Model): class Meta: verbose_name = 'Organizátor' verbose_name_plural = 'Organizátoři' + # Řadí aktivní orgy na začátek, pod tím v pořadí od nejstarších neaktivní orgy. + # TODO: Chtěl bych spíš mít nejstarší orgy dole. + # TODO: Zohledňovat přezdívky? + ordering = ['organizuje_do_roku', 'user__first_name', 'user__last_name'] @reversion.register(ignore_duplicates=True) From 9e03fba505185eca8391bbc87bb9f57739272306 Mon Sep 17 00:00:00 2001 From: MaM Web user Date: Wed, 13 Mar 2019 18:51:09 +0100 Subject: [PATCH 09/13] =?UTF-8?q?Chyba=20ve=20znam=C3=A9nku=20u=20=C5=99az?= =?UTF-8?q?en=C3=AD=20organiz=C3=A1tor=C5=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/models.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/seminar/models.py b/seminar/models.py index e3c89ab8..86ea2811 100644 --- a/seminar/models.py +++ b/seminar/models.py @@ -761,7 +761,8 @@ class Organizator(models.Model): # Řadí aktivní orgy na začátek, pod tím v pořadí od nejstarších neaktivní orgy. # TODO: Chtěl bych spíš mít nejstarší orgy dole. # TODO: Zohledňovat přezdívky? - ordering = ['organizuje_do_roku', 'user__first_name', 'user__last_name'] + # TODO: Sjednotit s tím, jak se řadí organizátoři v seznau orgů na webu + ordering = ['-organizuje_do_roku', 'user__first_name', 'user__last_name'] @reversion.register(ignore_duplicates=True) From dd9250a380357c49c76aacea1678ea07c850d0f9 Mon Sep 17 00:00:00 2001 From: LEdoian Date: Sun, 17 Mar 2019 19:48:33 +0100 Subject: [PATCH 10/13] =?UTF-8?q?P=C5=99edn=C3=A1=C5=A1ky:=20obt=C3=AD?= =?UTF-8?q?=C5=BEnost=20v=20seznamu,=20jen=20aktu=C3=A1ln=C3=AD=20body=20v?= =?UTF-8?q?e=20v=C3=BDsledc=C3=ADch?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ... Snad. --- prednasky/admin.py | 7 ++++++- prednasky/views.py | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/prednasky/admin.py b/prednasky/admin.py index a9b94ee0..f7ce8730 100644 --- a/prednasky/admin.py +++ b/prednasky/admin.py @@ -37,15 +37,20 @@ class Seznam_PrednaskaInline(admin.TabularInline): def prednaska__obor(self, obj): return obj.prednaska.obor + def prednaska__obtiznost(self, obj): + return obj.prednaska.obtiznost + prednaska__nazev.short_description = u'Přednáška' prednaska__popis.short_description = u'Popis pro orgy' prednaska__anotace.short_description = u'Anotace' prednaska__org.short_description = u'Org' prednaska__obor.short_description = u'Obor' + prednaska__obtiznost.short_description = u'Obtížnost' readonly_fields = [ 'prednaska__nazev', 'prednaska__obor', + 'prednaska__obtiznost', 'prednaska__org', 'prednaska__popis', 'prednaska__anotace', @@ -63,7 +68,7 @@ admin.site.register(Seznam, SeznamAdmin) class PrednaskaAdmin(VersionAdmin): - list_display = ['nazev', 'org', 'obor'] + list_display = ['nazev', 'org', 'obor', 'obtiznost'] list_filter = ['org', 'obor'] search_fields = [] filter_horizontal = ('seznamy', ) diff --git a/prednasky/views.py b/prednasky/views.py index 1e66ee64..7423f860 100644 --- a/prednasky/views.py +++ b/prednasky/views.py @@ -57,7 +57,7 @@ class SeznamListView(generic.ListView): self.seznam = get_object_or_404(Seznam, id=self.kwargs["seznam"]) prednasky = Prednaska.objects.filter(seznamy=self.seznam).order_by( 'org__user__first_name', 'org__user__last_name' - ).annotate(body=Sum('hlasovani__body')) + ).annotate(body=Sum('hlasovani__body').filter(seznam=self.seznam)) return prednasky From 5db763f2cb713632381f455a93efc319b44f9f48 Mon Sep 17 00:00:00 2001 From: LEdoian Date: Sun, 17 Mar 2019 21:27:35 +0100 Subject: [PATCH 11/13] =?UTF-8?q?Revert=20"P=C5=99edn=C3=A1=C5=A1ky:=20obt?= =?UTF-8?q?=C3=AD=C5=BEnost=20v=20seznamu,=20jen=20aktu=C3=A1ln=C3=AD=20bo?= =?UTF-8?q?dy=20ve=20v=C3=BDsledc=C3=ADch"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Víc věcí to rozbilo než opravilo This reverts commit dd9250a380357c49c76aacea1678ea07c850d0f9. --- prednasky/admin.py | 7 +------ prednasky/views.py | 2 +- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/prednasky/admin.py b/prednasky/admin.py index f7ce8730..a9b94ee0 100644 --- a/prednasky/admin.py +++ b/prednasky/admin.py @@ -37,20 +37,15 @@ class Seznam_PrednaskaInline(admin.TabularInline): def prednaska__obor(self, obj): return obj.prednaska.obor - def prednaska__obtiznost(self, obj): - return obj.prednaska.obtiznost - prednaska__nazev.short_description = u'Přednáška' prednaska__popis.short_description = u'Popis pro orgy' prednaska__anotace.short_description = u'Anotace' prednaska__org.short_description = u'Org' prednaska__obor.short_description = u'Obor' - prednaska__obtiznost.short_description = u'Obtížnost' readonly_fields = [ 'prednaska__nazev', 'prednaska__obor', - 'prednaska__obtiznost', 'prednaska__org', 'prednaska__popis', 'prednaska__anotace', @@ -68,7 +63,7 @@ admin.site.register(Seznam, SeznamAdmin) class PrednaskaAdmin(VersionAdmin): - list_display = ['nazev', 'org', 'obor', 'obtiznost'] + list_display = ['nazev', 'org', 'obor'] list_filter = ['org', 'obor'] search_fields = [] filter_horizontal = ('seznamy', ) diff --git a/prednasky/views.py b/prednasky/views.py index 7423f860..1e66ee64 100644 --- a/prednasky/views.py +++ b/prednasky/views.py @@ -57,7 +57,7 @@ class SeznamListView(generic.ListView): self.seznam = get_object_or_404(Seznam, id=self.kwargs["seznam"]) prednasky = Prednaska.objects.filter(seznamy=self.seznam).order_by( 'org__user__first_name', 'org__user__last_name' - ).annotate(body=Sum('hlasovani__body').filter(seznam=self.seznam)) + ).annotate(body=Sum('hlasovani__body')) return prednasky From bd92068b37d4842d646e313cebe94e7f74d61b89 Mon Sep 17 00:00:00 2001 From: LEdoian Date: Mon, 18 Mar 2019 00:34:37 +0100 Subject: [PATCH 12/13] =?UTF-8?q?Prednasky:=20v=20aktu=C3=A1ln=C3=ADch=20v?= =?UTF-8?q?=C3=BDsledc=C3=ADch=20jen=20aktu=C3=A1ln=C3=AD=20v=C3=BDsledky?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- prednasky/views.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/prednasky/views.py b/prednasky/views.py index 1e66ee64..5d4e2eab 100644 --- a/prednasky/views.py +++ b/prednasky/views.py @@ -3,7 +3,7 @@ from django.shortcuts import render, get_object_or_404 from django.views import generic from django.shortcuts import HttpResponseRedirect from django.core.exceptions import ObjectDoesNotExist -from django.db.models import Sum +from django.db.models import Sum, Subquery from prednasky.models import Prednaska, Hlasovani, Seznam, STAV_NAVRH from seminar.models import Soustredeni @@ -55,9 +55,14 @@ class SeznamListView(generic.ListView): def get_queryset(self): self.seznam = get_object_or_404(Seznam, id=self.kwargs["seznam"]) + # Od "annotate" je to hack opsaný ze stack overflow, kterým se filtrují + # jen výsledky z aktuálního seznamu. Dosud se zobrazoval součet bodů u + # přednášky od počátku historie. + # TODO: udělat lépe (Django 2 má Sum s filtrem) prednasky = Prednaska.objects.filter(seznamy=self.seznam).order_by( 'org__user__first_name', 'org__user__last_name' - ).annotate(body=Sum('hlasovani__body')) + ).annotate(body=Subquery(Hlasovani.objects.filter(seznam=self.seznam) + .values('body').annotate(b=Sum('body')).values('b'))) return prednasky From 0aa5faa995c89de3b536bd442bb2e773f2053e64 Mon Sep 17 00:00:00 2001 From: MaM Web user Date: Mon, 18 Mar 2019 00:56:53 +0100 Subject: [PATCH 13/13] =?UTF-8?q?Revert=20"Prednasky:=20v=20aktu=C3=A1ln?= =?UTF-8?q?=C3=ADch=20v=C3=BDsledc=C3=ADch=20jen=20aktu=C3=A1ln=C3=AD=20v?= =?UTF-8?q?=C3=BDsledky"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Zase to nefungovalo This reverts commit bd92068b37d4842d646e313cebe94e7f74d61b89. --- prednasky/views.py | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/prednasky/views.py b/prednasky/views.py index 5d4e2eab..1e66ee64 100644 --- a/prednasky/views.py +++ b/prednasky/views.py @@ -3,7 +3,7 @@ from django.shortcuts import render, get_object_or_404 from django.views import generic from django.shortcuts import HttpResponseRedirect from django.core.exceptions import ObjectDoesNotExist -from django.db.models import Sum, Subquery +from django.db.models import Sum from prednasky.models import Prednaska, Hlasovani, Seznam, STAV_NAVRH from seminar.models import Soustredeni @@ -55,14 +55,9 @@ class SeznamListView(generic.ListView): def get_queryset(self): self.seznam = get_object_or_404(Seznam, id=self.kwargs["seznam"]) - # Od "annotate" je to hack opsaný ze stack overflow, kterým se filtrují - # jen výsledky z aktuálního seznamu. Dosud se zobrazoval součet bodů u - # přednášky od počátku historie. - # TODO: udělat lépe (Django 2 má Sum s filtrem) prednasky = Prednaska.objects.filter(seznamy=self.seznam).order_by( 'org__user__first_name', 'org__user__last_name' - ).annotate(body=Subquery(Hlasovani.objects.filter(seznam=self.seznam) - .values('body').annotate(b=Sum('body')).values('b'))) + ).annotate(body=Sum('hlasovani__body')) return prednasky