add: frontend k bodům
This commit is contained in:
		
							parent
							
								
									57b7c6372d
								
							
						
					
					
						commit
						39da362586
					
				
					 4 changed files with 68 additions and 11 deletions
				
			
		|  | @ -1255,3 +1255,8 @@ div.gdpr { | |||
| label[for=id_skola] { | ||||
| 	font-weight: bold; | ||||
| } | ||||
| 
 | ||||
| /* detail řešení */ | ||||
| .bodovani>input { | ||||
| 	width: 4em; | ||||
| } | ||||
|  |  | |||
|  | @ -103,6 +103,22 @@ class JednoHodnoceniForm(forms.ModelForm): | |||
| 			'feedback': forms.Textarea(attrs={'rows': 1, 'cols': 30, 'class': 'feedback'}), | ||||
| 			} | ||||
| 
 | ||||
| 	body_celkem = forms.DecimalField(required=False, decimal_places=1) | ||||
| 	body_neprepocitane = forms.DecimalField(required=False, decimal_places=1) | ||||
| 	body_neprepocitane_celkem = forms.DecimalField(required=False, decimal_places=1) | ||||
| 
 | ||||
| 	def __init__(self, *args, initial=None, **kwargs): | ||||
| 		if initial is not None: | ||||
| 			body_max = initial["body_max"] | ||||
| 			body_neprepocitane_max = initial["body_neprepocitane_max"] | ||||
| 			del(initial["body_max"]) | ||||
| 			del(initial["body_neprepocitane_max"]) | ||||
| 		super().__init__(*args, initial=initial, **kwargs) | ||||
| 		if initial is not None: | ||||
| 			self.fields['body_celkem'].widget.attrs['placeholder'] = body_max | ||||
| 			self.fields['body_neprepocitane_celkem'].widget.attrs['placeholder'] = body_neprepocitane_max | ||||
| 
 | ||||
| 
 | ||||
| OhodnoceniReseniFormSet = formset_factory(JednoHodnoceniForm, | ||||
| 		extra = 0, | ||||
| 		) | ||||
|  |  | |||
|  | @ -54,12 +54,15 @@ | |||
| {{ form.management_form }} | ||||
| </table> | ||||
| <table id="form_set"> | ||||
| <tr><th>Problém</th><th>Body</th><th>Deadline pro body</th><th>Zpětná vazba pro řešitele</th></tr> | ||||
| <tr><th>Problém</th><th>{# 📖 #}🧍</th><th>{# 🔵 #}🧍∑</th><th>{# 💪 #}🧑🤝🧑</th><th>{# ❤ #}🧑🤝🧑∑</th><th>Deadline pro body</th><th>Zpětná vazba pro řešitele</th></tr> | ||||
| {% for subform in form %} | ||||
|     <tbody> | ||||
| 	<tr class="hodnoceni"> | ||||
| 		<td>{{ subform.problem }}</td> | ||||
| 		<td>{{ subform.body }}</td> | ||||
| 		<td class="bodovani">{{ subform.body }}</td> | ||||
| 		<td class="bodovani">{{ subform.body_celkem }}</td> | ||||
| 		<td class="bodovani">{{ subform.body_neprepocitane }}</td> | ||||
| 		<td class="bodovani">{{ subform.body_neprepocitane_celkem }}</td> | ||||
| 		<td>{{ subform.deadline_body }}</td> | ||||
| 		<td>{{ subform.feedback }}</td> | ||||
| 		<td class="has_smazat_hodnoceni"><a href="#" class="smazat_hodnoceni" id="id_{{subform.prefix}}-jsremove" title="Smazat hodnocení"><img src="{% static "odevzdavatko/cross.png" %}" alt="Smazat"></a></td> | ||||
|  | @ -72,10 +75,15 @@ | |||
| <a href="#" title="Přidat hodnocení"> <img src="{% static "odevzdavatko/plus.png" %}" id="pridat_hodnoceni" alt="Přidat hodnocení"></a> <br/> | ||||
| <input type=submit value="Uložit"></form> | ||||
| 
 | ||||
| {# FIXME Zablokovat ostatni při změně #} | ||||
| 
 | ||||
| <table id="empty_form" style="display: none;"> | ||||
| 	<tr class="hodnoceni"> | ||||
| 		<td>{{ form.empty_form.problem }}</td> | ||||
| 		<td>{{ form.empty_form.body }}</td> | ||||
| 		<td class="bodovani">{{ form.empty_form.body }}</td> | ||||
| 		<td class="bodovani">{{ form.empty_form.body_celkem }}</td> | ||||
| 		<td class="bodovani">{{ form.empty_form.body_neprepocitane }}</td> | ||||
| 		<td class="bodovani">{{ form.empty_form.body_neprepocitane_celkem }}</td> | ||||
| 		<td>{{ form.empty_form.deadline_body }}</td> | ||||
| 		<td>{{ form.empty_form.feedback }}</td> | ||||
| 		<td class="has_smazat_hodnoceni"><a href="#" class="smazat_hodnoceni" id="id_{{form.empty_form.prefix}}-jsremove" title="Smazat hodnocení"><img src="{% static "odevzdavatko/cross.png" %}" alt="Smazat"></a></td> | ||||
|  | @ -85,16 +93,33 @@ | |||
|   {% else %} | ||||
| <h3>Hodnocení:</h3> | ||||
| <table class="dosla_reseni"> | ||||
| <tr><th>Problém</th><th>Body</th><th>Zpětná vazba od opravovatele</th></tr> | ||||
| <tr><th>Problém</th><th>{# 📖 #}🧍</th><th>{# 🔵 #}🧍∑</th><th>{# 💪 #}🧑🤝🧑</th><th>{# ❤ #}🧑🤝🧑∑</th><th>Zpětná vazba od opravovatele</th></tr> | ||||
| {% for h in hodnoceni %} | ||||
| 	<tr class="hodnoceni"> | ||||
| 		<td>{{ h.problem }}</td> | ||||
| 		<td>{{ h.body }}</td> | ||||
| 		<td class="bodovani">{{ h.body }}</td> | ||||
| 		<td class="bodovani">{{ h.body_celkem }}</td> | ||||
| 		<td class="bodovani">{{ h.body_neprepocitane }}</td> | ||||
| 		<td class="bodovani">{{ h.body_neprepocitane_celkem }}</td> | ||||
| 		<td>{{ h.feedback }}</td> | ||||
| 	</tr> | ||||
| {% endfor %} | ||||
| </table> | ||||
|   {% endif %} | ||||
| 
 | ||||
| <dl> | ||||
|   <dt>{# 📖 #}🧍</dt> | ||||
|   <dd>Body, které dostává jeden řešitel za toto řešení.</dd> | ||||
| 
 | ||||
|   <dt>{# 🔵 #}🧍∑</dt> | ||||
|   <dd>Body, které dostává jeden řešitel za tento problém (součet za všechna řešení).</dd> | ||||
| 
 | ||||
|   <dt>{# 💪 #}🧑🤝🧑</dt> | ||||
|   <dd>Body, které by dostal tým, kdyby to řešil jako jeden řešitel, za toto řešení.</dd> | ||||
| 
 | ||||
|   <dt>{# ❤ #}🧑🤝🧑∑</dt> | ||||
|   <dd>Body, které by dostal tým, kdyby to řešil jako jeden řešitel, za tento problém (součet za všechna řešení).</dd> | ||||
| </dl> | ||||
| 
 | ||||
| 
 | ||||
| {% endblock %} | ||||
|  |  | |||
|  | @ -224,12 +224,18 @@ class DetailReseniView(DetailView): | |||
| 		self.reseni = get_object_or_404(m.Reseni, id=self.kwargs['pk']) | ||||
| 		result = [] # Slovníky s klíči problem, body, deadline_body -- initial data pro f.OhodnoceniReseniFormSet | ||||
| 		for hodn in m.Hodnoceni.objects.filter(reseni=self.reseni): | ||||
| 			result.append({ | ||||
| 				"problem": hodn.problem, | ||||
| 				"body": hodn.body, | ||||
| 				"deadline_body": hodn.deadline_body, | ||||
| 				"feedback": hodn.feedback, | ||||
| 				}) | ||||
| 			seznam_atributu = [ | ||||
| 				"problem", | ||||
| 				"body", | ||||
| 				"body_celkem", | ||||
| 				"body_neprepocitane", | ||||
| 				"body_neprepocitane_celkem", | ||||
| 				"body_max", | ||||
| 				"body_neprepocitane_max", | ||||
| 				"deadline_body", | ||||
| 				"feedback", | ||||
| 			] | ||||
| 			result.append({attr: getattr(hodn, attr) for attr in seznam_atributu}) | ||||
| 		return result | ||||
| 
 | ||||
| 	def get_context_data(self, **kw): | ||||
|  | @ -292,6 +298,11 @@ def hodnoceniReseniView(request, pk, *args, **kwargs): | |||
| 
 | ||||
| 		# Vyrobíme nová podle formsetu | ||||
| 		for form in formset: | ||||
| 			data_for_hodnoceni = form.cleaned_data | ||||
| 			data_for_body = data_for_hodnoceni.copy() | ||||
| 			del(data_for_hodnoceni["body_celkem"]) | ||||
| 			del(data_for_hodnoceni["body_neprepocitane"]) | ||||
| 			del(data_for_hodnoceni["body_neprepocitane_celkem"]) | ||||
| 			hodnoceni = m.Hodnoceni( | ||||
| 					reseni=reseni, | ||||
| 					**form.cleaned_data, | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue