feat: added material to model and form
This commit is contained in:
@@ -35,17 +35,31 @@
|
||||
{% if not view.can_edit or form.description.field.disabled %}disabled{% endif %}
|
||||
class="w-full p-2 border border-gray-300 rounded shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500 {% if not view.can_edit or form.description.field.disabled %}bg-gray-100{% endif %}">{{ ticket.description }}</textarea>
|
||||
</div>
|
||||
<div>
|
||||
<label class="block text-sm font-medium mb-1">Kurs:</label>
|
||||
<select name="course"
|
||||
id="id_course"
|
||||
{% if not view.can_edit %}disabled{% endif %}
|
||||
class="w-full p-2 border border-gray-300 rounded shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500 {% if not view.can_edit %}bg-gray-100{% endif %}">
|
||||
{% for course in form.course.field.queryset %}
|
||||
<option value="{{ course.pk }}"
|
||||
{% if course.pk == ticket.course.pk %}selected{% endif %}>{{ course }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
<div class="grid grid-cols-2 gap-4">
|
||||
<div>
|
||||
<label class="block text-sm font-medium mb-1">Kurs:</label>
|
||||
<select name="course"
|
||||
id="id_course"
|
||||
{% if not view.can_edit %}disabled{% endif %}
|
||||
class="w-full p-2 border border-gray-300 rounded shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500 {% if not view.can_edit %}bg-gray-100{% endif %}">
|
||||
{% for course in form.course.field.queryset %}
|
||||
<option value="{{ course.pk }}"
|
||||
{% if course.pk == ticket.course.pk %}selected{% endif %}>{{ course }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
<div>
|
||||
<label class="block text-sm font-medium mb-1">Material:</label>
|
||||
<select name="material"
|
||||
id="id_material"
|
||||
{% if not view.can_edit %}disabled{% endif %}
|
||||
class="w-full p-2 border border-gray-300 rounded shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500 {% if not view.can_edit %}bg-gray-100{% endif %}">
|
||||
{% for value, display in form.fields.material.choices %}
|
||||
<option value="{{ value }}"
|
||||
{% if form.material.value == value %}selected{% endif %}>{{ display }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="grid grid-cols-2 gap-4">
|
||||
<div>
|
||||
@@ -74,28 +88,30 @@
|
||||
<!-- Zugewiesen an (Nur Anzeige) -->
|
||||
<div>
|
||||
<label class="block text-sm font-medium mb-1">Zugewiesen an:</label>
|
||||
<div id="tutor_display" class="w-full p-2 border border-gray-300 bg-gray-100 rounded shadow-sm">
|
||||
<span id="tutor_text">{% if ticket.assigned_to %}{{ ticket.assigned_to.username }}{% else %}Niemand zugewiesen{% endif %}</span>
|
||||
<div id="tutor_display"
|
||||
class="w-full p-2 border border-gray-300 bg-gray-100 rounded shadow-sm">
|
||||
<span id="tutor_text">
|
||||
{% if ticket.assigned_to %}
|
||||
{{ ticket.assigned_to.username }}
|
||||
{% else %}
|
||||
Niemand zugewiesen
|
||||
{% endif %}
|
||||
</span>
|
||||
</div>
|
||||
<p class="text-xs text-gray-500 mt-1">Wird automatisch basierend auf dem ausgewählten Kurs zugewiesen</p>
|
||||
</div>
|
||||
|
||||
<!-- Antwort/Lösung -->
|
||||
<div>
|
||||
<label class="block text-sm font-medium mb-1">
|
||||
Antwort/Lösung:
|
||||
{% if form.status.value == 'resolved' or ticket.status == 'resolved' %}
|
||||
<span class="text-red-500">*</span>
|
||||
{% endif %}
|
||||
{% if form.status.value == 'resolved' or ticket.status == 'resolved' %}<span class="text-red-500">*</span>{% endif %}
|
||||
</label>
|
||||
{% if ticket.answer and not view.can_edit %}
|
||||
<!-- Nur Anzeige wenn bereits beantwortet und nicht editierbar -->
|
||||
<div class="w-full p-3 border border-gray-300 bg-gray-50 rounded shadow-sm">
|
||||
<div class="text-gray-700">{{ ticket.answer|linebreaks }}</div>
|
||||
{% if ticket.answered_at %}
|
||||
<div class="text-xs text-gray-500 mt-2">
|
||||
Beantwortet am: {{ ticket.answered_at|date:"d.m.Y H:i" }}
|
||||
</div>
|
||||
<div class="text-xs text-gray-500 mt-2">Beantwortet am: {{ ticket.answered_at|date:"d.m.Y H:i" }}</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% else %}
|
||||
@@ -105,13 +121,9 @@
|
||||
{% if not view.can_edit or ticket.status != 'resolved' %}disabled{% endif %}
|
||||
placeholder="Beschreibe die Lösung des Problems..."
|
||||
class="w-full p-2 border border-gray-300 rounded shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500 placeholder:text-black {% if not view.can_edit or ticket.status != 'resolved' %}bg-gray-100 cursor-not-allowed{% endif %}">{{ ticket.answer|default:'' }}</textarea>
|
||||
{% if form.answer.errors %}
|
||||
<div class="text-red-600 text-sm mt-1">{{ form.answer.errors }}</div>
|
||||
{% endif %}
|
||||
{% if form.answer.errors %}<div class="text-red-600 text-sm mt-1">{{ form.answer.errors }}</div>{% endif %}
|
||||
<p class="text-xs text-gray-500 mt-1">
|
||||
{% if ticket.status != 'resolved' %}
|
||||
Eine Antwort ist erforderlich beim Setzen des Status auf "Gelöst"
|
||||
{% endif %}
|
||||
{% if ticket.status != 'resolved' %}Eine Antwort ist erforderlich beim Setzen des Status auf "Gelöst"{% endif %}
|
||||
</p>
|
||||
{% endif %}
|
||||
</div>
|
||||
@@ -181,7 +193,6 @@
|
||||
class="text-blue-500 hover:text-blue-600">← Zurück zur Übersicht</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- JavaScript für dynamische Tutor-Anzeige -->
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
@@ -192,9 +203,7 @@
|
||||
// Course-Tutor Mapping
|
||||
const courseTutorMap = {
|
||||
{% for course in form.course.field.queryset %}
|
||||
{% if course.tutor %}
|
||||
'{{ course.pk }}': '{{ course.tutor.username }}',
|
||||
{% endif %}
|
||||
{% if course.tutor %}'{{ course.pk }}': '{{ course.tutor.username }}',{% endif %}
|
||||
{% endfor %}
|
||||
};
|
||||
|
||||
@@ -251,4 +260,4 @@
|
||||
});
|
||||
{% endif %}
|
||||
</script>
|
||||
{% endblock %}
|
||||
{% endblock %}
|
||||
|
||||
@@ -44,19 +44,38 @@
|
||||
<div class="text-red-600 text-sm mt-1">{{ form.description.errors }}</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div>
|
||||
<label class="block text-sm font-medium mb-1">Kurs: *</label>
|
||||
<select name="course"
|
||||
id="id_course"
|
||||
required
|
||||
class="w-full p-2 border border-gray-300 rounded shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500">
|
||||
<option value="">Kurs auswählen...</option>
|
||||
{% for course in form.course.field.queryset %}
|
||||
<option value="{{ course.pk }}"
|
||||
{% if form.course.value == course.pk %}selected{% endif %}>{{ course }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
{% if form.course.errors %}<div class="text-red-600 text-sm mt-1">{{ form.course.errors }}</div>{% endif %}
|
||||
<!-- Kurs und Material -->
|
||||
<div class="grid grid-cols-2 gap-4">
|
||||
<div>
|
||||
<label class="block text-sm font-medium mb-1">Kurs: *</label>
|
||||
<select name="course"
|
||||
id="id_course"
|
||||
required
|
||||
class="w-full p-2 border border-gray-300 rounded shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500">
|
||||
<option value="">Kurs auswählen...</option>
|
||||
{% for course in form.course.field.queryset %}
|
||||
<option value="{{ course.pk }}"
|
||||
{% if form.course.value == course.pk %}selected{% endif %}>
|
||||
{{ course }}
|
||||
</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
{% if form.course.errors %}<div class="text-red-600 text-sm mt-1">{{ form.course.errors }}</div>{% endif %}
|
||||
</div>
|
||||
<div>
|
||||
<label class="block text-sm font-medium mb-1">Material: *</label>
|
||||
<select name="material"
|
||||
id="id_material"
|
||||
required
|
||||
class="w-full p-2 border border-gray-300 rounded shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500">
|
||||
<option value="">Material auswählen...</option>
|
||||
{% for value, display in form.fields.material.choices %}
|
||||
<option value="{{ value }}"
|
||||
{% if form.material.value == value %}selected{% endif %}>{{ display }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
{% if form.course.errors %}<div class="text-red-600 text-sm mt-1">{{ form.course.errors }}</div>{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
<!-- Status und Priorität -->
|
||||
<div class="grid grid-cols-2 gap-4">
|
||||
@@ -77,13 +96,10 @@
|
||||
<label class="block text-sm font-medium mb-1">Priorität:</label>
|
||||
<select name="priority"
|
||||
class="w-full p-2 border border-gray-300 rounded shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500">
|
||||
<option value="low" {% if form.priority.value == 'low' %}selected{% endif %}>Niedrig</option>
|
||||
<option value="medium"
|
||||
{% if form.priority.value == 'medium' or not form.priority.value %}selected{% endif %}>
|
||||
Normal
|
||||
</option>
|
||||
<option value="high"
|
||||
{% if form.priority.value == 'high' %}selected{% endif %}>Hoch</option>
|
||||
{% for value, display in form.fields.priority.choices %}
|
||||
<option value="{{ value }}"
|
||||
{% if form.priority.value == value %}selected{% endif %}>{{ display }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
{% if form.priority.errors %}<div class="text-red-600 text-sm mt-1">{{ form.priority.errors }}</div>{% endif %}
|
||||
</div>
|
||||
@@ -91,7 +107,8 @@
|
||||
<!-- Zugewiesen an -->
|
||||
<div>
|
||||
<label class="block text-sm font-medium mb-1">Zugewiesen an:</label>
|
||||
<div id="tutor_display" class="w-full p-2 border border-gray-300 bg-gray-100 rounded shadow-sm">
|
||||
<div id="tutor_display"
|
||||
class="w-full p-2 border border-gray-300 bg-gray-100 rounded shadow-sm">
|
||||
<span id="tutor_text">Bitte Kurs auswählen</span>
|
||||
</div>
|
||||
<p class="text-xs text-gray-500 mt-1">Wird automatisch basierend auf dem ausgewählten Kurs zugewiesen</p>
|
||||
@@ -123,7 +140,6 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
const courseSelect = document.getElementById('id_course');
|
||||
@@ -133,9 +149,7 @@
|
||||
// Course-Tutor Mapping speichern
|
||||
const courseTutorMap = {
|
||||
{% for course in form.course.field.queryset %}
|
||||
{% if course.tutor %}
|
||||
'{{ course.pk }}': '{{ course.tutor.username }}',
|
||||
{% endif %}
|
||||
{% if course.tutor %}'{{ course.pk }}': '{{ course.tutor.username }}',{% endif %}
|
||||
{% endfor %}
|
||||
};
|
||||
|
||||
@@ -166,4 +180,4 @@
|
||||
}
|
||||
});
|
||||
</script>
|
||||
{% endblock %}
|
||||
{% endblock %}
|
||||
|
||||
Reference in New Issue
Block a user