Add řešitelské view na řešení
This commit is contained in:
parent
c0f5f68b8a
commit
ee40db6e25
3 changed files with 81 additions and 0 deletions
seminar
50
seminar/templates/seminar/odevzdavatko/detail_resitele.html
Normal file
50
seminar/templates/seminar/odevzdavatko/detail_resitele.html
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
{% extends "base.html" %}
|
||||||
|
{% load static %}
|
||||||
|
{% load deadliny %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
|
||||||
|
<p>Řešené problémy: {{ object.problem.all | join:", " }}</p>
|
||||||
|
|
||||||
|
<p>Řešitelé: {% for r in object.resitele.all %} {{ r }}
|
||||||
|
{% if forloop.revcounter0 != 0 %}, {% endif %} {% endfor %}</p>
|
||||||
|
|
||||||
|
{# https://docs.djangoproject.com/en/3.1/ref/models/instances/#django.db.models.Model.get_FOO_display #}
|
||||||
|
<p>Forma: {{ object.get_forma_display }}</p>
|
||||||
|
|
||||||
|
<p>Doručeno {{ object.cas_doruceni }}, deadline: {{object.cas_doruceni | deadline_html }}</p>
|
||||||
|
|
||||||
|
{# Soubory: #}
|
||||||
|
<h3>Přílohy:</h3>
|
||||||
|
{% if object.prilohy.all %}
|
||||||
|
<table class="dosla_reseni">
|
||||||
|
<tr><th>Soubor</th><th>Řešitelova poznámka</th><th>Datum</th></tr>
|
||||||
|
{% for priloha in object.prilohy.all %}
|
||||||
|
<tr>
|
||||||
|
<td><a href="{{ priloha.soubor.url }}" download>{{ priloha.split | last }}</a></td>
|
||||||
|
<td>{{ priloha.res_poznamka }}</td>
|
||||||
|
<td>{{ priloha.vytvoreno }}</td></tr>
|
||||||
|
{# TODO: Orgo-poznámka, ideálně jako formulář #}
|
||||||
|
{% endfor %}
|
||||||
|
</table>
|
||||||
|
{% else %}
|
||||||
|
<p>Žádné přílohy</p>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{#<h3>Poznámka:</h3>#}
|
||||||
|
{#<p>{{ poznamka }}</p>#}
|
||||||
|
|
||||||
|
{# Hodnocení: #}
|
||||||
|
<h3>Hodnocení:</h3>
|
||||||
|
<table id="form_set" class="dosla_reseni">
|
||||||
|
<tr><th>Problém</th><th>Body</th>{# <th>Číslo pro body</th> #}</tr>
|
||||||
|
{% for h in hodnoceni %}
|
||||||
|
<tr class="hodnoceni">
|
||||||
|
<td>{{ h.problem }}</td>
|
||||||
|
<td>{{ h.body }}</td>
|
||||||
|
{# <td>{{ h.cislo_body }}</td>#}
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</table>
|
||||||
|
|
||||||
|
{% endblock %}
|
|
@ -142,4 +142,6 @@ urlpatterns = [
|
||||||
path('org/reseni/<int:pk>', org_required(viewMethodSwitch(get=views.DetailReseniView.as_view(), post=views.hodnoceniReseniView)), name='odevzdavatko_detail_reseni'),
|
path('org/reseni/<int:pk>', org_required(viewMethodSwitch(get=views.DetailReseniView.as_view(), post=views.hodnoceniReseniView)), name='odevzdavatko_detail_reseni'),
|
||||||
path('org/reseni/all', org_required(views.SeznamReseniView.as_view())),
|
path('org/reseni/all', org_required(views.SeznamReseniView.as_view())),
|
||||||
path('org/reseni/akt', org_required(views.SeznamAktualnichReseniView.as_view())),
|
path('org/reseni/akt', org_required(views.SeznamAktualnichReseniView.as_view())),
|
||||||
|
|
||||||
|
path('resitel/reseni/<int:pk>', resitel_or_org_required(views.ResitelReseniView.as_view()), name='odevzdavatko_resitel_reseni'),
|
||||||
]
|
]
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
from django.core.exceptions import PermissionDenied
|
||||||
from django.views.generic import ListView, DetailView, FormView
|
from django.views.generic import ListView, DetailView, FormView
|
||||||
from django.views.generic.list import MultipleObjectTemplateResponseMixin,MultipleObjectMixin
|
from django.views.generic.list import MultipleObjectTemplateResponseMixin,MultipleObjectMixin
|
||||||
from django.views.generic.base import View
|
from django.views.generic.base import View
|
||||||
|
@ -268,6 +269,34 @@ def hodnoceniReseniView(request, pk, *args, **kwargs):
|
||||||
return redirect(success_url)
|
return redirect(success_url)
|
||||||
|
|
||||||
|
|
||||||
|
class ResitelReseniView(DetailView):
|
||||||
|
model = m.Reseni
|
||||||
|
template_name = 'seminar/odevzdavatko/detail_resitele.html'
|
||||||
|
|
||||||
|
def aktualni_hodnoceni(self):
|
||||||
|
self.reseni = get_object_or_404(m.Reseni, id=self.kwargs['pk'])
|
||||||
|
result = []
|
||||||
|
for hodn in m.Hodnoceni.objects.filter(reseni=self.reseni):
|
||||||
|
result.append(
|
||||||
|
{
|
||||||
|
"problem": hodn.problem,
|
||||||
|
"body": hodn.body,
|
||||||
|
# "cislo_body": hodn.cislo_body,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
return result
|
||||||
|
|
||||||
|
def get_context_data(self, **kw):
|
||||||
|
ctx = super().get_context_data(**kw)
|
||||||
|
hodnoceni = self.aktualni_hodnoceni()
|
||||||
|
if self.request.user not in self.reseni.resitele.all():
|
||||||
|
raise PermissionDenied()
|
||||||
|
# ctx['poznamka'] = f.PoznamkaReseniForm(instance=self.reseni)
|
||||||
|
ctx["hodnoceni"] = hodnoceni
|
||||||
|
return ctx
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class PrehledOdevzdanychReseni(ListView):
|
class PrehledOdevzdanychReseni(ListView):
|
||||||
model = m.Hodnoceni
|
model = m.Hodnoceni
|
||||||
template_name = 'seminar/odevzdavatko/resitel_prehled.html'
|
template_name = 'seminar/odevzdavatko/resitel_prehled.html'
|
||||||
|
|
Loading…
Reference in a new issue