Merge pull request 'Úpravy výsledkovky' (!36) from pregenerovavani-deadlinu into master
Reviewed-on: #36
This commit is contained in:
		
						commit
						14b3caaa04
					
				
					 4 changed files with 41 additions and 23 deletions
				
			
		|  | @ -12,15 +12,25 @@ from django.utils.safestring import mark_safe | |||
| import seminar.models as m | ||||
| 
 | ||||
| admin.site.register(m.Rocnik) | ||||
| 
 | ||||
| admin.site.register(m.Deadline) | ||||
| admin.site.register(m.ZmrazenaVysledkovka) | ||||
| 
 | ||||
| @admin.register(m.Deadline) | ||||
| class DeadlineAdmin(admin.ModelAdmin): | ||||
| 	actions = ['pregeneruj_vysledkovku'] | ||||
| 
 | ||||
| 	# Nikomu nezobrazovat, ale superuživatelům se může hodit :-) | ||||
| 	@admin.action(permissions=['bazmek'], description= 'Přegeneruj výsledkovky vybraných deadlinů') | ||||
| 	def pregeneruj_vysledkovku(self, req, qs): | ||||
| 		for deadline in qs: | ||||
| 			deadline.vygeneruj_vysledkovku() | ||||
| 	 | ||||
| 	def has_bazmek_permission(self, request): | ||||
| 		# Boilerplate: potřebujeme nějakou permission, protože nějaká haluz v Djangu… | ||||
| 		return request.user.is_superuser | ||||
| 	 | ||||
| class DeadlineAdminInline(admin.TabularInline): | ||||
|     model = m.Deadline | ||||
|     extra = 0 | ||||
| 
 | ||||
| 	model = m.Deadline | ||||
| 	extra = 0 | ||||
| 
 | ||||
| class CisloForm(ModelForm): | ||||
| 	class Meta: | ||||
|  | @ -71,7 +81,7 @@ class CisloForm(ModelForm): | |||
| @admin.register(m.Cislo) | ||||
| class CisloAdmin(admin.ModelAdmin): | ||||
| 	form = CisloForm | ||||
| 	actions = ['force_publish'] | ||||
| 	actions = ['force_publish', 'pregeneruj_vysledkovky'] | ||||
| 	inlines = (DeadlineAdminInline,) | ||||
| 
 | ||||
| 	def force_publish(self,request,queryset): | ||||
|  | @ -111,6 +121,17 @@ class CisloAdmin(admin.ModelAdmin): | |||
| 
 | ||||
| 	force_publish.short_description = 'Zveřejnit vybraná čísla a všechny návrhy úloh v nich učinit zadanými' | ||||
| 
 | ||||
| 	# Jen pro superuživatele | ||||
| 	@admin.action(permissions=['bazmek'], description='Přegenerovat výsledkovky všech deadlinů vybraných čísel') | ||||
| 	def pregeneruj_vysledkovky(self, req, qs): | ||||
| 		for cislo in qs: | ||||
| 			for deadline in cislo.deadline_v_cisle.all(): | ||||
| 				deadline.vygeneruj_vysledkovku() | ||||
| 	 | ||||
| 	def has_bazmek_permission(self, request): | ||||
| 		# Boilerplate: potřebujeme nějakou permission, protože nějaká haluz v Djangu… | ||||
| 		return request.user.is_superuser | ||||
| 
 | ||||
| 
 | ||||
| @admin.register(m.Problem) | ||||
| class ProblemAdmin(PolymorphicParentModelAdmin): | ||||
|  |  | |||
|  | @ -491,7 +491,7 @@ class Problem(SeminarModelBase,PolymorphicModel): | |||
| 				return self.nadproblem.kod_v_rocniku+".{}".format(self.kod) | ||||
| 			return str(self.kod) | ||||
| 		logger.warning(f"K problému {self} byl vyžadován kód v ročníku, i když není zadaný ani vyřešený.") | ||||
| 		return '<Není zadaný>' | ||||
| 		return f'<Není zadaný: {self.kod}>' | ||||
| 
 | ||||
| #	def verejne(self): | ||||
| #		# aktuálně podle stavu problému | ||||
|  | @ -571,9 +571,9 @@ class Tema(Problem): | |||
| 		if self.stav == Problem.STAV_ZADANY or self.stav == Problem.STAV_VYRESENY: | ||||
| 			if self.nadproblem: | ||||
| 				return self.nadproblem.kod_v_rocniku+".t{}".format(self.kod) | ||||
| 			return "t{}".format(self.kod) | ||||
| 			return 't'+self.kod | ||||
| 		logger.warning(f"K problému {self} byl vyžadován kód v ročníku, i když není zadaný ani vyřešený.") | ||||
| 		return '<Není zadaný>' | ||||
| 		return f'<Není zadaný: {self.kod}>' | ||||
| 
 | ||||
| 	def save(self, *args, **kwargs): | ||||
| 		super().save(*args, **kwargs) | ||||
|  | @ -607,9 +607,9 @@ class Clanek(Problem): | |||
| # Nemělo by být potřeba | ||||
| #			if self.nadproblem: | ||||
| #				return self.nadproblem.kod_v_rocniku+".c{}".format(self.kod) | ||||
| 			return "c{}".format(self.kod) | ||||
| 			return "c" + self.kod | ||||
| 		logger.warning(f"K problému {self} byl vyžadován kód v ročníku, i když není zadaný ani vyřešený.") | ||||
| 		return '<Není zadaný>' | ||||
| 		return f'<Není zadaný: {self.kod}>' | ||||
| 	 | ||||
| 	def node(self): | ||||
| 		return None | ||||
|  | @ -642,12 +642,9 @@ class Uloha(Problem): | |||
| 	@cached_property | ||||
| 	def kod_v_rocniku(self): | ||||
| 		if self.stav == Problem.STAV_ZADANY or self.stav == Problem.STAV_VYRESENY: | ||||
| 			name="{}.u{}".format(self.cislo_zadani.poradi,self.kod) | ||||
| 			if self.nadproblem: | ||||
| 				return self.nadproblem.kod_v_rocniku+name | ||||
| 			return name | ||||
| 			return f"{self.cislo_zadani.poradi}.{self.kod}" | ||||
| 		logger.warning(f"K problému {self} byl vyžadován kód v ročníku, i když není zadaný ani vyřešený.") | ||||
| 		return '<Není zadaný>' | ||||
| 		return f'<Není zadaný: {self.kod}>' | ||||
| 
 | ||||
| 	def save(self, *args, **kwargs): | ||||
| 		super().save(*args, **kwargs) | ||||
|  |  | |||
|  | @ -4,11 +4,11 @@ | |||
|         <th class='border-r'>#</th> | ||||
|         <th class='border-r'>Jméno</th> | ||||
|             {% for p in vysledkovka.temata_a_spol%} | ||||
|                 <th class='border-r' id="problem{{ oznaceni_vysledkovky }}_{{ forloop.counter0 }}">{# <a href="{{ p.verejne_url }}"> #}{{ p.kod_v_rocniku }}{# </a> #}</th> | ||||
|                 <th class='border-r' id="problem{{ oznaceni_vysledkovky }}_{{ forloop.counter0 }}">{# <a href="{{ p.verejne_url }}"> #}<span title="{{ p }}">{{ p.kod_v_rocniku }}</span>{# </a> #}</th> | ||||
| 
 | ||||
|                     {# TODELETE #} | ||||
|                     {% for podproblemy in vysledkovka.podproblemy_iter.next %} | ||||
|                         <th class='border-r podproblem{{ oznaceni_vysledkovky }}_{{ forloop.parentloop.counter0 }} podproblem'>{# <a href="{{ podproblemy.verejne_url }}"> #}{{ podproblemy.kod_v_rocniku }}{# </a> #}</th> | ||||
|                         <th class='border-r podproblem{{ oznaceni_vysledkovky }}_{{ forloop.parentloop.counter0 }} podproblem'>{# <a href="{{ podproblemy.verejne_url }}"> #}<span title="{{ podproblemy }}">{{ podproblemy.kod_v_rocniku }}</span>{# </a> #}</th> | ||||
|                     {% endfor %} | ||||
|                 {# TODELETE #} | ||||
| 
 | ||||
|  | @ -17,7 +17,7 @@ | |||
| 
 | ||||
|         {# TODELETE #} | ||||
|         {% for podproblemy in vysledkovka.podproblemy_iter.next %} | ||||
|             <th class='border-r podproblem{{ oznaceni_vysledkovky }}_{{ vysledkovka.temata_a_spol| length }} podproblem'>{# <a href="{{ podproblemy.verejne_url }}"> #}{{ podproblemy.kod_v_rocniku }}{# </a> #}</th> | ||||
|             <th class='border-r podproblem{{ oznaceni_vysledkovky }}_{{ vysledkovka.temata_a_spol| length }} podproblem'>{# <a href="{{ podproblemy.verejne_url }}"> #}<span title="{{ podproblemy }}">{{ podproblemy.kod_v_rocniku }}</span>{# </a> #}</th> | ||||
|         {% endfor %} | ||||
|         {# TODELETE #} | ||||
| 
 | ||||
|  |  | |||
|  | @ -257,7 +257,7 @@ class VysledkovkaCisla(Vysledkovka): | |||
| 		# (mají vlastní sloupeček ve výsledkovce, nemají nadproblém) | ||||
| 		hlavni_problemy = set() | ||||
| 		for p in self.problemy: | ||||
| 			hlavni_problemy.add(p.hlavni_problem) | ||||
| 			hlavni_problemy.add(p.hlavni_problem) # FIXME: proč tohle nemůže obsahovat reálné instance? Ve výsledkovce by se pak zobrazovaly správné kódy… | ||||
| 
 | ||||
| 		# zunikátnění | ||||
| 		hlavni_problemy = list(hlavni_problemy) | ||||
|  | @ -313,7 +313,7 @@ class VysledkovkaCisla(Vysledkovka): | |||
| 
 | ||||
| 		# Sečteme hodnocení | ||||
| 		for hodnoceni in self.hodnoceni_do_cisla: | ||||
| 			prob = hodnoceni.problem | ||||
| 			prob = hodnoceni.problem.get_real_instance() | ||||
| 			nadproblem = prob.hlavni_problem.id | ||||
| 
 | ||||
| 			# Když nadproblém není "téma", pak je "Ostatní" | ||||
|  | @ -366,9 +366,9 @@ class VysledkovkaCisla(Vysledkovka): | |||
| 		for problem in self.problemy: | ||||
| 			h_problem = problem.hlavni_problem | ||||
| 			if h_problem in temata_a_spol: | ||||
| 				podproblemy[h_problem.id].append(problem) | ||||
| 				podproblemy[h_problem.id].append(problem.get_real_instance()) | ||||
| 			else: | ||||
| 				podproblemy[-1].append(problem) | ||||
| 				podproblemy[-1].append(problem.get_real_instance()) | ||||
| 
 | ||||
| 		for podproblem in podproblemy.keys(): | ||||
| 			podproblemy[podproblem] = sorted(podproblemy[podproblem], key=lambda p: p.kod_v_rocniku) | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue