WIP: Nástroj pro plošné vyrábění problémů #17
					 4 changed files with 92 additions and 0 deletions
				
			
		
							
								
								
									
										47
									
								
								tvorba/templates/tvorba/org/vyroba_problemu.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								tvorba/templates/tvorba/org/vyroba_problemu.html
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,47 @@ | ||||||
|  | {% extends "base.html" %} | ||||||
|  | 
 | ||||||
|  | {% block content %} | ||||||
|  |   <h1> | ||||||
|  |     {% block nadpis1a %} | ||||||
|  | 	Zadané problémy k tématu {{ tema }} | ||||||
|  | 	{# TODO: Jak chceme umožnit problémy jak k témátku tak všechny? #} | ||||||
|  |     {% endblock %} | ||||||
|  |   </h1> | ||||||
|  |   <form method=POST><table class="dosla_reseni"> | ||||||
|  | 	{% csrf_token %} | ||||||
|  | 	<tr> | ||||||
|  | 	  <th>{# checkbox #}</th> | ||||||
|  | 	  <th>Úloha/Problém</th> | ||||||
|  | 	  <th>Stav</th> | ||||||
|  | 	  <th>{# admin #}</th> | ||||||
|  | 	</tr> | ||||||
|  |   {% for obj in object_list %} | ||||||
|  |     <tr> | ||||||
|  | 		<td><input type=checkbox name="problem_id" value="{{ obj.pk }}" id="problem_{{ obj.pk }}"</td> | ||||||
|  | 	  <td>{{ obj.nazev }}</td> | ||||||
|  | 	  <td>{{ obj.get_stav_display }}</td> | ||||||
|  | 	  <td><a href="{% url 'admin:seminar_problem_change' obj.pk %}">🔧</a></td> | ||||||
|  | 	</tr> | ||||||
|  |   {% endfor %} | ||||||
|  |   </table> | ||||||
|  |   Označené problémy označit jako: <select name=akce> | ||||||
|  | 	  {% for k,v in STAVY.items %} | ||||||
|  | 	  <option value="{{ k }}">{{ v }}</option> | ||||||
|  | 	  {% endfor %} | ||||||
|  |     </select> | ||||||
|  |     <input type=submit value=Proveď> | ||||||
|  |   </form> | ||||||
|  | 
 | ||||||
|  |   <hrule> | ||||||
|  |   <h1> Přidat problémy </h1> | ||||||
|  |   <form> | ||||||
|  |     {% csrf_token %} | ||||||
|  | 	{{ form }} | ||||||
|  | 	{# - Téma, čísla úloh, čísla problémů, šablona názvu problému. #} | ||||||
|  |   </form> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   <p>TODO: Help text: jak vypadá formát čísel, co se dá psát do šablony</p> | ||||||
|  |   <p>Pokud chceš přidat jen jeden problém nebo vyrobit témátko, použij k tomu spíš <a href="{% url 'admin:seminar_problem_changelist' %}">Admin 🔧</a>. | ||||||
|  | 
 | ||||||
|  | {% endblock content %} | ||||||
|  | @ -72,4 +72,6 @@ urlpatterns = [ | ||||||
| 		org_required(views.HromadnePridaniView.as_view()), | 		org_required(views.HromadnePridaniView.as_view()), | ||||||
| 		name="hromadne_pridani" | 		name="hromadne_pridani" | ||||||
| 	), | 	), | ||||||
|  | 
 | ||||||
|  | 	path('test/zadavatko_problemu', org_required(views.zadavatkoProblemuView), name='zadavatko_problemu'), | ||||||
| ] | ] | ||||||
|  |  | ||||||
|  | @ -1,6 +1,9 @@ | ||||||
| # Dočsasné views | # Dočsasné views | ||||||
| from .docasne import * | from .docasne import * | ||||||
| 
 | 
 | ||||||
|  | # Zadávátko problémů | ||||||
|  | from .zadavatko_problemu import zadavatkoProblemuView | ||||||
|  | 
 | ||||||
| # Zbytek | # Zbytek | ||||||
| 
 | 
 | ||||||
| from django.shortcuts import get_object_or_404, render | from django.shortcuts import get_object_or_404, render | ||||||
|  |  | ||||||
							
								
								
									
										40
									
								
								tvorba/views/zadavatko_problemu.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								tvorba/views/zadavatko_problemu.py
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,40 @@ | ||||||
|  | import seminar.models as m | ||||||
|  | from django.shortcuts import render | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def zadavatkoProblemuView(req, problem=None): | ||||||
|  | 	template_name = 'tvorba/org/vyroba_problemu.html' | ||||||
|  | 
 | ||||||
|  | 	if req.method == 'POST': | ||||||
|  | 		cilovy_stav = req.POST['akce'] | ||||||
|  | 		pr = req.POST['problem_id'] | ||||||
|  | 		print(cilovy_stav, pr) | ||||||
|  | 
 | ||||||
|  | 	if problem is None: | ||||||
|  | 		# Vykradený autocomplete :-) | ||||||
|  | 		rocnik = m.Nastaveni.get_solo().aktualni_rocnik | ||||||
|  | 		problemy = m.Uloha.objects.filter(cislo_zadani__rocnik=rocnik) | ||||||
|  | 		# Věříme, že drtivá většina úložek bude mít číslo zadání už od vzniku, protože vznikly tady. K úložce bez čísla zadání se pořád dá dostat přes témátko, k těm netémátkovým jen z Admina. | ||||||
|  | 	else: | ||||||
|  | 		problemy = problem.podproblemy_rekurzivne | ||||||
|  | 
 | ||||||
|  | 	# Je potřeba mít v kontextu: | ||||||
|  | 	#	- seznam příslušných problémů | ||||||
|  | 	#	- Formulář na vybírání problémů a společné změny | ||||||
|  | 	#	- Umět filtrovat jen na nevyřešené problémy (Návrhy, Smazané a Vyřešené nechci vidět vždycky) | ||||||
|  | 	#	- Formulář na vyrábění problémů – logika má být asi ve forms… | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 	ctx = {'object_list': problemy, 'form': 'Hello!', 'STAVY': dict(m.Problem.STAV_CHOICES)} | ||||||
|  | 	return render(req, template_name, ctx) | ||||||
|  | 
 | ||||||
|  | # TODO: Přesunout forms někam jinam! (nechtělo se mi počáteční implementaci sekat do spousty souborů, pro vývoj to bylo přehlednější) | ||||||
|  | 
 | ||||||
|  | # NOTE: Formsety nejdou použít, protože my chceme vlastní značítka. | ||||||
|  | #	- Na takovém řádku chceme: | ||||||
|  | #		- Zaškrtávátko s výběrem | ||||||
|  | #		- Přehled stavu: název problému, stav, číslo zadání, počet bodů | ||||||
|  | #		- Nějak snadno umět upravit stav. (Výhledově inlinemodelform + disketka asi) | ||||||
|  | #		- Odkaz do Admina | ||||||
|  | #		- Reset opravovatelů/garantů/… (i.e. podědit z nadproblému)? | ||||||
|  | 
 | ||||||
		Loading…
	
		Reference in a new issue