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
				
			
		
							
								
								
									
										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