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()), | ||||
| 		name="hromadne_pridani" | ||||
| 	), | ||||
| 
 | ||||
| 	path('test/zadavatko_problemu', org_required(views.zadavatkoProblemuView), name='zadavatko_problemu'), | ||||
| ] | ||||
|  |  | |||
|  | @ -1,6 +1,9 @@ | |||
| # Dočsasné views | ||||
| from .docasne import * | ||||
| 
 | ||||
| # Zadávátko problémů | ||||
| from .zadavatko_problemu import zadavatkoProblemuView | ||||
| 
 | ||||
| # Zbytek | ||||
| 
 | ||||
| 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