Browse Source

Částečné řešení #1465 (Podezřelé `seminar`e)

pull/65/head
Jonas Havelka 2 weeks ago
parent
commit
5db14ea242
  1. 4
      api/tests/test_skola_autocomplete.py
  2. 2
      api/views/exports.py
  3. 2
      galerie/views.py
  4. 2
      novinky/templates/novinky/novinky.html
  5. 2
      odevzdavatko/admin.py
  6. 2
      odevzdavatko/forms.py
  7. 4
      odevzdavatko/templatetags/barvy_reseni.py
  8. 4
      odevzdavatko/templatetags/jmena.py
  9. 2
      personalni/admin.py
  10. 2
      personalni/forms.py
  11. 2
      personalni/tests.py
  12. 6
      personalni/utils.py
  13. 24
      personalni/views.py
  14. 2
      prednasky/admin.py
  15. 3
      prednasky/views.py
  16. 12
      treenode/templates/treenode/treenode_recursive.html
  17. 2
      tvorba/templates/tvorba/archiv/problem_clanek.html
  18. 2
      tvorba/templates/tvorba/archiv/problem_tema.html
  19. 2
      tvorba/templates/tvorba/archiv/problem_uloha.html
  20. 2
      tvorba/templates/tvorba/archiv/problem_uloha_tema.html
  21. 2
      tvorba/templates/tvorba/clanky/organizatorske_clanky.html
  22. 2
      vyroci/views.py

4
api/tests/test_skola_autocomplete.py

@ -1,6 +1,6 @@
from django.test import TestCase, tag from django.test import TestCase, tag
from django.urls import reverse from django.urls import reverse
import seminar.models as m from personalni.models import Skola
from personalni.utils import sync_skoly from personalni.utils import sync_skoly
@tag('stejny-model-na-produkci') @tag('stejny-model-na-produkci')
@ -48,7 +48,7 @@ class OrgSkolyAutocompleteTestCase(TestCase):
"""Testuje, že pro každého orga je jeho škola ve výsledném QuerySetu""" """Testuje, že pro každého orga je jeho škola ve výsledném QuerySetu"""
for pfx, id in self.spravna_data: for pfx, id in self.spravna_data:
with self.subTest(prefix=pfx, spravne_id=id): with self.subTest(prefix=pfx, spravne_id=id):
spravna_skola = m.Skola.objects.get(id=id) spravna_skola = Skola.objects.get(id=id)
# Zeptáme se view, co si myslí # Zeptáme se view, co si myslí
resp = self.client.get(reverse('autocomplete_skola')+'?q='+pfx).json() resp = self.client.get(reverse('autocomplete_skola')+'?q='+pfx).json()
ids = [int(x['id']) for x in resp['results']] ids = [int(x['id']) for x in resp['results']]

2
api/views/exports.py

@ -1,4 +1,4 @@
import seminar.models as m import personalni.models as m
from django.core import serializers as ser from django.core import serializers as ser
from django.http import HttpResponse from django.http import HttpResponse
def exportSkolView(request): def exportSkolView(request):

2
galerie/views.py

@ -6,7 +6,7 @@ from django.template import RequestContext
from datetime import datetime from datetime import datetime
from galerie.models import Obrazek, Galerie from galerie.models import Obrazek, Galerie
from seminar.models import Soustredeni from soustredeni.models import Soustredeni
from galerie.forms import KomentarForm, NewGalerieForm from galerie.forms import KomentarForm, NewGalerieForm
def zobrazit(galerie, request): def zobrazit(galerie, request):

2
novinky/templates/novinky/novinky.html

@ -4,7 +4,7 @@
{% if not novinka.zverejneno and user.je_org %} {% if not novinka.zverejneno and user.je_org %}
<div class="mam-org-only"> <div class="mam-org-only">
<ul> <ul>
<li><a href="/admin/seminar/novinky/{{novinka.pk}}">Upravit novinku</a> <li><a href="/admin/novinky/novinky/{{novinka.pk}}">Upravit novinku</a>
</ul> </ul>
{% endif %} {% endif %}
{% if novinka.zverejneno or user.je_org %} {% if novinka.zverejneno or user.je_org %}

2
odevzdavatko/admin.py

@ -1,6 +1,6 @@
from django.contrib import admin from django.contrib import admin
from django_reverse_admin import ReverseModelAdmin from django_reverse_admin import ReverseModelAdmin
import seminar.models as m import odevzdavatko.models as m
class PrilohaReseniInline(admin.TabularInline): class PrilohaReseniInline(admin.TabularInline):

2
odevzdavatko/forms.py

@ -4,7 +4,7 @@ from django.forms import formset_factory
from django.forms.models import inlineformset_factory from django.forms.models import inlineformset_factory
from django.utils import timezone from django.utils import timezone
from seminar.models import Resitel from personalni.models import Resitel
import seminar.models as m import seminar.models as m
import logging import logging

4
odevzdavatko/templatetags/barvy_reseni.py

@ -2,11 +2,11 @@ from django import template
register = template.Library() register = template.Library()
from functools import cache from functools import cache
import seminar.models as m from odevzdavatko.models import Reseni
@register.filter @register.filter
@cache @cache
def barva_reseni(r: m.Reseni): def barva_reseni(r: Reseni):
"""Vrátí nějakou barvu pro daný problém, ve tvaru '#RRGGBB' """Vrátí nějakou barvu pro daný problém, ve tvaru '#RRGGBB'
Efektivně hešujeme do barev.""" Efektivně hešujeme do barev."""

4
odevzdavatko/templatetags/jmena.py

@ -2,8 +2,8 @@ from django import template
register = template.Library() register = template.Library()
from personalni.utils import normalizuj_jmeno from personalni.utils import normalizuj_jmeno
import seminar.models as m # jen kvůli typové anotaci… from personalni.models import Osoba # jen kvůli typové anotaci…
@register.filter @register.filter
def jmeno_jako_prefix(o: m.Osoba): def jmeno_jako_prefix(o: Osoba):
return normalizuj_jmeno(o).replace(' ', '_') return normalizuj_jmeno(o).replace(' ', '_')

2
personalni/admin.py

@ -2,7 +2,7 @@ from django.contrib import admin
from django.contrib.auth.models import Group from django.contrib.auth.models import Group
from django_reverse_admin import ReverseModelAdmin from django_reverse_admin import ReverseModelAdmin
from django.contrib.messages import WARNING, ERROR, SUCCESS from django.contrib.messages import WARNING, ERROR, SUCCESS
import seminar.models as m import personalni.models as m
from datetime import datetime from datetime import datetime
@admin.action(description="Sjednoť telefony") @admin.action(description="Sjednoť telefony")

2
personalni/forms.py

@ -4,7 +4,7 @@ from django.contrib.auth.forms import PasswordResetForm
from django.core.exceptions import ObjectDoesNotExist from django.core.exceptions import ObjectDoesNotExist
from django.contrib.auth.models import User from django.contrib.auth.models import User
from seminar.models import Skola, Resitel, Osoba from personalni.models import Skola, Resitel, Osoba
from datetime import date from datetime import date
import logging import logging

2
personalni/tests.py

@ -4,7 +4,7 @@ from django.contrib.auth.models import User, Group
from django.contrib.admin.sites import AdminSite from django.contrib.admin.sites import AdminSite
from personalni.admin import OsobaAdmin from personalni.admin import OsobaAdmin
# Tohle bude peklo, až jednou ty modely fakt rozstřelíme… Možná vyrobit various.all_models, které půjdou importovat jako m? :-) # Tohle bude peklo, až jednou ty modely fakt rozstřelíme… Možná vyrobit various.all_models, které půjdou importovat jako m? :-)
import seminar.models as m import personalni.models as m
import logging import logging
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)

6
personalni/utils.py

@ -1,4 +1,3 @@
import seminar.models as m
from various.utils import bez_diakritiky_translate from various.utils import bez_diakritiky_translate
import re import re
@ -7,9 +6,10 @@ from django.contrib.auth.decorators import permission_required, user_passes_test
from django.contrib.auth.models import AnonymousUser from django.contrib.auth.models import AnonymousUser
from django.db import transaction from django.db import transaction
import seminar.models as m
import soustredeni.models import soustredeni.models
from odevzdavatko.models import Reseni_Resitele
from .models import Osoba, Organizator, Skola, Resitel, Prijemce from .models import Osoba, Organizator, Skola, Resitel, Prijemce
@ -97,7 +97,7 @@ def merge_resitele(cilovy, zdrojovy):
# Přepojit všechny vazby ze zdrojového na cílového # Přepojit všechny vazby ze zdrojového na cílového
print('Přepojuji vazby') print('Přepojuji vazby')
# Vazby: Škola (hotovo), Řešení_Řešitelé, Konfery_Účastníci, Soustředění_Účastníci, Osoba (vyřeší se později, nejde přepojit) # Vazby: Škola (hotovo), Řešení_Řešitelé, Konfery_Účastníci, Soustředění_Účastníci, Osoba (vyřeší se později, nejde přepojit)
ct = m.Reseni_Resitele.objects.filter(resitele=zdrojovy).update(resitele=cilovy) ct = Reseni_Resitele.objects.filter(resitele=zdrojovy).update(resitele=cilovy)
print(f' Přepojeno {ct} řešení') print(f' Přepojeno {ct} řešení')
ct = soustredeni.models.Konfery_Ucastnici.objects.filter(resitel=zdrojovy).update(resitel=cilovy) ct = soustredeni.models.Konfery_Ucastnici.objects.filter(resitel=zdrojovy).update(resitel=cilovy)
print(f' Přepojeno {ct} konfer') print(f' Přepojeno {ct} konfer')

24
personalni/views.py

@ -17,7 +17,9 @@ from django.http import HttpResponse
from django.utils import timezone from django.utils import timezone
import seminar.models as s import seminar.models as s
import seminar.models as m import personalni.models as m
from soustredeni.models import Soustredeni
from odevzdavatko.models import Hodnoceni
from .forms import PrihlaskaForm, ProfileEditForm, PoMaturiteProfileEditForm from .forms import PrihlaskaForm, ProfileEditForm, PoMaturiteProfileEditForm
from datetime import date from datetime import date
@ -91,7 +93,7 @@ class OrgoRozcestnikView(TemplateView):
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs) context = super().get_context_data(**kwargs)
context['posledni_soustredeni'] = s.Soustredeni.objects.order_by('-datum_konce').first() context['posledni_soustredeni'] = Soustredeni.objects.order_by('-datum_konce').first()
nastaveni = s.Nastaveni.objects.first() nastaveni = s.Nastaveni.objects.first()
aktualni_rocnik = nastaveni.aktualni_rocnik aktualni_rocnik = nastaveni.aktualni_rocnik
context['posledni_cislo_url'] = nastaveni.aktualni_cislo.verejne_url() context['posledni_cislo_url'] = nastaveni.aktualni_cislo.verejne_url()
@ -99,14 +101,14 @@ class OrgoRozcestnikView(TemplateView):
# pokud nechceme haluzit kód (= poradi) dalšího čísla, bude asi potřeba jít # pokud nechceme haluzit kód (= poradi) dalšího čísla, bude asi potřeba jít
# přes treenody (a dát si přitom pozor na MezicisloNode) # přes treenody (a dát si přitom pozor na MezicisloNode)
neobodovana_reseni = s.Hodnoceni.objects.filter(body__isnull=True) neobodovana_reseni = Hodnoceni.objects.filter(body__isnull=True)
reseni_mimo_cislo = s.Hodnoceni.objects.filter(deadline_body__isnull=True) reseni_mimo_cislo = Hodnoceni.objects.filter(deadline_body__isnull=True)
context['pocet_neobodovanych_reseni'] = neobodovana_reseni.count() context['pocet_neobodovanych_reseni'] = neobodovana_reseni.count()
context['pocet_reseni_mimo_cislo'] = reseni_mimo_cislo.count() context['pocet_reseni_mimo_cislo'] = reseni_mimo_cislo.count()
u = self.request.user u = self.request.user
os = s.Osoba.objects.get(user=u) os = m.Osoba.objects.get(user=u)
organizator = s.Organizator.objects.get(osoba=os) organizator = m.Organizator.objects.get(osoba=os)
context['muj_pocet_neobodovanych_reseni'] = neobodovana_reseni.filter(Q(problem__garant=organizator) | Q(problem__autor=organizator) | Q(problem__opravovatele__in=[organizator])).distinct().count() context['muj_pocet_neobodovanych_reseni'] = neobodovana_reseni.filter(Q(problem__garant=organizator) | Q(problem__autor=organizator) | Q(problem__opravovatele__in=[organizator])).distinct().count()
context['muj_pocet_reseni_mimo_cislo'] = reseni_mimo_cislo.filter(Q(problem__garant=organizator) | Q(problem__autor=organizator) | Q(problem__opravovatele__in=[organizator])).count() context['muj_pocet_reseni_mimo_cislo'] = reseni_mimo_cislo.filter(Q(problem__garant=organizator) | Q(problem__autor=organizator) | Q(problem__opravovatele__in=[organizator])).count()
@ -134,12 +136,12 @@ class OrgoRozcestnikView(TemplateView):
class ResitelView(LoginRequiredMixin,generic.DetailView): class ResitelView(LoginRequiredMixin,generic.DetailView):
model = s.Resitel model = m.Resitel
template_name = 'personalni/profil/resitel.html' template_name = 'personalni/profil/resitel.html'
def get_object(self, queryset=None): def get_object(self, queryset=None):
print(self.request.user) print(self.request.user)
return s.Resitel.objects.get(osoba__user=self.request.user) return m.Resitel.objects.get(osoba__user=self.request.user)
### Formulare ### Formulare
@ -160,7 +162,7 @@ def resitelEditView(request):
err_logger = logging.getLogger('seminar.prihlaska.problem') err_logger = logging.getLogger('seminar.prihlaska.problem')
## Načtení objektů Osoba a Resitel patřících k aktuálně přihlášenému uživateli ## Načtení objektů Osoba a Resitel patřících k aktuálně přihlášenému uživateli
u = request.user u = request.user
osoba_edit = s.Osoba.objects.get(user=u) osoba_edit = m.Osoba.objects.get(user=u)
if hasattr(osoba_edit,'resitel'): if hasattr(osoba_edit,'resitel'):
resitel_edit = osoba_edit.resitel resitel_edit = osoba_edit.resitel
else: else:
@ -266,7 +268,7 @@ def prihlaskaView(request):
resitel_grp = Group.objects.filter(name__exact='resitel').first() resitel_grp = Group.objects.filter(name__exact='resitel').first()
u.groups.add(resitel_grp) u.groups.add(resitel_grp)
o = s.Osoba( o = m.Osoba(
jmeno = fcd['jmeno'], jmeno = fcd['jmeno'],
prijmeni = fcd['prijmeni'], prijmeni = fcd['prijmeni'],
osloveni = fcd['osloveni'], osloveni = fcd['osloveni'],
@ -328,7 +330,7 @@ def prihlaskaView(request):
if kolize.count() > 1: # Jednu z nich jsme právě uložili if kolize.count() > 1: # Jednu z nich jsme právě uložili
err_logger.warning(f'Zaregistrovala se osoba s kolizním jménem. ID osob: {[o.id for o in kolize]}') err_logger.warning(f'Zaregistrovala se osoba s kolizním jménem. ID osob: {[o.id for o in kolize]}')
r = s.Resitel( r = m.Resitel(
prezdivka_resitele=fcd['prezdivka_resitele'] if fcd['prezdivka_resitele'] != "" else None, prezdivka_resitele=fcd['prezdivka_resitele'] if fcd['prezdivka_resitele'] != "" else None,
rok_maturity = fcd['rok_maturity'], rok_maturity = fcd['rok_maturity'],
zasilat = fcd['zasilat'], zasilat = fcd['zasilat'],

2
prednasky/admin.py

@ -5,7 +5,7 @@ from django.utils.safestring import mark_safe
from django.utils.html import escape from django.utils.html import escape
from .models import Prednaska, Seznam, STAV_NAVRH from .models import Prednaska, Seznam, STAV_NAVRH
from seminar.models import Soustredeni from soustredeni.models import Soustredeni
class Seznam_PrednaskaInline(admin.TabularInline): class Seznam_PrednaskaInline(admin.TabularInline):

3
prednasky/views.py

@ -6,7 +6,8 @@ from django.db.models import Sum
from django.forms import Form from django.forms import Form
from prednasky.models import Prednaska, Hlasovani, Seznam, STAV_NAVRH from prednasky.models import Prednaska, Hlasovani, Seznam, STAV_NAVRH
from seminar.models import Soustredeni, Osoba from soustredeni.models import Soustredeni
from personalni.models import Osoba
def newPrednaska(request): def newPrednaska(request):
# hlasovani se vztahuje k nejnovejsimu soustredeni # hlasovani se vztahuje k nejnovejsimu soustredeni

12
treenode/templates/treenode/treenode_recursive.html

@ -25,20 +25,20 @@
<button>Zvyš úroveň nadpisu</button> - nejsou testovací data <button>Zvyš úroveň nadpisu</button> - nejsou testovací data
</div> </div>
{% endif %} {% endif %}
{% include "seminar/treenode_name.html" %} {% include "treenode/treenode_name.html" %}
{%if obj.children %} {%if obj.children %}
<div class="borderized children"> <div class="borderized children">
{% with kam="před" kam_slug="syn" %} {% include "seminar/treenode_add_stub.html" %} {% endwith %} {% with kam="před" kam_slug="syn" %} {% include "treenode/treenode_add_stub.html" %} {% endwith %}
{%for ch in obj.children %} {%for ch in obj.children %}
{# ----------- Vypisujeme podstrom ----------#} {# ----------- Vypisujeme podstrom ----------#}
{%with obj=ch depth=depth|add:"1" %} {%include "seminar/treenode_recursive.html" %} {%endwith%} {%with obj=ch depth=depth|add:"1" %} {%include "treenode/treenode_recursive.html" %} {%endwith%}
{# ----------- Přidáváme mezi syny / za posledního -------- #} {# ----------- Přidáváme mezi syny / za posledního -------- #}
{% if forloop.last %} {% if forloop.last %}
{% with kam="za" kam_slug="za" obj=ch %} {% include "seminar/treenode_add_stub.html" %} {% endwith %} {% with kam="za" kam_slug="za" obj=ch %} {% include "treenode/treenode_add_stub.html" %} {% endwith %}
{% else %} {% else %}
{% with kam="mezi" obj=ch kam_slug="za" %} {% include "seminar/treenode_add_stub.html" %} {% endwith %} {% with kam="mezi" obj=ch kam_slug="za" %} {% include "treenode/treenode_add_stub.html" %} {% endwith %}
{% endif %} {% endif %}
{# ----------- Prohazujeme sousedy ----------#} {# ----------- Prohazujeme sousedy ----------#}
<div class="pink"> <div class="pink">
@ -50,6 +50,6 @@
</div> </div>
{% else %} {% else %}
{# ----------- Přidáváme prvního syna ----------#} {# ----------- Přidáváme prvního syna ----------#}
{% with kam="jako syna" kam_slug="syn" %} {% include "seminar/treenode_add_stub.html" %} {% endwith %} {% with kam="jako syna" kam_slug="syn" %} {% include "treenode/treenode_add_stub.html" %} {% endwith %}
{%endif%} {%endif%}
</div> </div>

2
tvorba/templates/tvorba/archiv/problem_clanek.html

@ -1,4 +1,4 @@
{% extends "seminar/archiv/problem.html" %} {% extends "tvorba/archiv/problem.html" %}
{% block problem %} {% block problem %}
{% if problem.cislo_zadani %} {% if problem.cislo_zadani %}

2
tvorba/templates/tvorba/archiv/problem_tema.html

@ -1,4 +1,4 @@
{% extends "seminar/archiv/problem.html" %} {% extends "tvorba/archiv/problem.html" %}
{% block problem %} {% block problem %}
<h1> <h1>

2
tvorba/templates/tvorba/archiv/problem_uloha.html

@ -1,4 +1,4 @@
{% extends "seminar/archiv/problem.html" %} {% extends "tvorba/archiv/problem.html" %}
{% block problem %} {% block problem %}
<h1> <h1>

2
tvorba/templates/tvorba/archiv/problem_uloha_tema.html

@ -1,4 +1,4 @@
{% extends "seminar/archiv/problem.html" %} {% extends "tvorba/archiv/problem.html" %}
{% block problem %} {% block problem %}
<h1> <h1>

2
tvorba/templates/tvorba/clanky/organizatorske_clanky.html

@ -1,4 +1,4 @@
{% extends 'seminar/clanky/resitelske_clanky.html' %} {% extends 'tvorba/clanky/resitelske_clanky.html' %}
{% block nadpis1a %} {% block nadpis1a %}
Organizátorské články Organizátorské články

2
vyroci/views.py

@ -1,6 +1,6 @@
from django.views.generic import FormView, ListView from django.views.generic import FormView, ListView
from seminar.models import Osoba from personalni.models import Osoba
from various.views.pomocne import formularOKView from various.views.pomocne import formularOKView
from .forms import UcastnikVyrociForm from .forms import UcastnikVyrociForm
from .models import UcastnikVyroci from .models import UcastnikVyroci

Loading…
Cancel
Save