Součty
Hnusně, ale přece…
This commit is contained in:
		
							parent
							
								
									bef932345c
								
							
						
					
					
						commit
						86f6d47f10
					
				
					 2 changed files with 14 additions and 6 deletions
				
			
		|  | @ -36,13 +36,16 @@ Do data (včetně): {{ filtr.reseni_do }} | |||
| 			{# TODO: Chceme mít view i na řešení konkrétního řešitele ke všem problémům? #} | ||||
| 			{{ resitel }} | ||||
| 		</td> | ||||
| 		{% for bunka in hodnoty %} | ||||
| 		{% for soucet,bunka in hodnoty %} | ||||
| 			<td> | ||||
| 			{% for reseni,hodnoceni in bunka %} | ||||
| 				<a href="{% url 'odevzdavatko_detail_reseni' pk=reseni.id %}"> | ||||
| 					{{reseni.cas_doruceni | date:"j. n."}} ({{ hodnoceni.body|default:"🔨"}}b) | ||||
| 					{{reseni.cas_doruceni | date:"j. n."}} ({{ hodnoceni.body|default_if_none:"🔨"}} b) | ||||
| 				</a><br> | ||||
| 			{% endfor %} | ||||
| 			{% if bunka|length > 1 %} | ||||
| 				<b>Σ: {{soucet}} b</b> | ||||
| 			{% endif %} | ||||
| 			</td> | ||||
| 		{% endfor %} | ||||
| 	</tr> | ||||
|  |  | |||
|  | @ -13,6 +13,7 @@ from django.db.models import Q | |||
| 
 | ||||
| from dataclasses import dataclass | ||||
| import datetime | ||||
| from decimal import Decimal | ||||
| from itertools import groupby | ||||
| import logging | ||||
| 
 | ||||
|  | @ -119,6 +120,7 @@ class TabulkaOdevzdanychReseniView(ListView): | |||
| 		ctx['problemy'] = self.problemy | ||||
| 		ctx['resitele'] = self.resitele | ||||
| 		tabulka: dict[m.Problem, dict[m.Resitel, list[tuple[m.Reseni, m.Hodnoceni]]]] = dict() | ||||
| 		soucty: dict[m.Problem, dict[m.Resitel, Decimal]] = dict() | ||||
| 
 | ||||
| 		def pridej_reseni(resitel, hodnoceni): | ||||
| 			problem = hodnoceni.problem | ||||
|  | @ -127,26 +129,29 @@ class TabulkaOdevzdanychReseniView(ListView): | |||
| 			reseni = hodnoceni.reseni | ||||
| 			if problem not in tabulka: | ||||
| 				tabulka[problem] = dict() | ||||
| 				soucty[problem] = dict() | ||||
| 			if resitel not in tabulka[problem]: | ||||
| 				tabulka[problem][resitel] = [(reseni, hodnoceni)] | ||||
| 				soucty[problem][resitel] = hodnoceni.body or 0 # Neobodované neřešíme | ||||
| 			else: | ||||
| 				tabulka[problem][resitel].append((reseni, hodnoceni)) | ||||
| 				soucty[problem][resitel] += hodnoceni.body or 0 # Neobodované neřešíme | ||||
| 		 | ||||
| 		for hodnoceni in self.get_queryset(): | ||||
| 			for resitel in hodnoceni.reseni.resitele.all(): | ||||
| 				pridej_reseni(resitel, hodnoceni) | ||||
| 
 | ||||
| 		hodnoty: list[list[list[tuple[m.Reseni, m.Hodnoceni]]]] = [] # Seznam řádků výsledné tabulky podle self.resitele, v každém řádku buňky v pořadí podle self.problemy, v každé buňce seznam řešení k danému řešiteli a problému. | ||||
| 		hodnoty: list[list[tuple[Decimal,list[tuple[m.Reseni, m.Hodnoceni]]]]] = [] # Seznam řádků výsledné tabulky podle self.resitele, v každém řádku buňky v pořadí podle self.problemy + jejich součty, v každé buňce seznam řešení k danému řešiteli a problému. | ||||
| 		resitele_do_tabulky: list[m.Resitel] = [] | ||||
| 		for resitel in self.resitele: | ||||
| 			dostal_body = False | ||||
| 			resiteluv_radek: list[list[tuple[m.Resitel, m.Hodnoceni]]] = [] # podle pořadí v self.problemy | ||||
| 			resiteluv_radek: list[tuple[Decimal,list[tuple[m.Resitel, m.Hodnoceni]]]] = [] # podle pořadí v self.problemy | ||||
| 			for problem in self.problemy: | ||||
| 				if problem in tabulka and resitel in tabulka[problem]: | ||||
| 					resiteluv_radek.append(tabulka[problem][resitel]) | ||||
| 					resiteluv_radek.append((soucty[problem][resitel], tabulka[problem][resitel])) | ||||
| 					dostal_body = True | ||||
| 				else: | ||||
| 					resiteluv_radek.append([]) | ||||
| 					resiteluv_radek.append((Decimal(0),[])) | ||||
| 			if self.chteni_resitele != FiltrForm.RESITELE_RELEVANTNI or dostal_body: | ||||
| 				hodnoty.append(resiteluv_radek) | ||||
| 				resitele_do_tabulky.append(resitel) | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Pavel "LEdoian" Turinsky
						Pavel "LEdoian" Turinsky