From a8180bb5a0173300f244a1864d7c8479c37e1976 Mon Sep 17 00:00:00 2001 From: Tom Teichler <tom.teichler@teckids.org> Date: Sat, 31 Aug 2019 23:05:51 +0200 Subject: [PATCH] Add way to edit substitution. --- biscuit/apps/chronos/forms.py | 7 +++++- .../templates/chronos/edit_substitution.html | 14 +++++++++++ biscuit/apps/chronos/urls.py | 1 + biscuit/apps/chronos/views.py | 23 ++++++++++++++++++- 4 files changed, 43 insertions(+), 2 deletions(-) create mode 100644 biscuit/apps/chronos/templates/chronos/edit_substitution.html diff --git a/biscuit/apps/chronos/forms.py b/biscuit/apps/chronos/forms.py index 72c97eb2..2ad9b84d 100644 --- a/biscuit/apps/chronos/forms.py +++ b/biscuit/apps/chronos/forms.py @@ -18,7 +18,12 @@ class SelectForm(forms.Form): queryset=Room.objects.annotate(lessons_count=Count('lesson_periods')).filter(lessons_count__gt=0), label=_('Room'), required=False) -class LessonSubstitution(forms.ModelForm): +class LessonSubstitutionForm(forms.ModelForm): class Meta: model = LessonSubstitution fields = ['week', 'lesson_period', 'subject', 'teachers', 'room'] + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.fields['teachers'].queryset = Person.objects.all() + self.fields['room'].queryset = Person.objects.all() diff --git a/biscuit/apps/chronos/templates/chronos/edit_substitution.html b/biscuit/apps/chronos/templates/chronos/edit_substitution.html new file mode 100644 index 00000000..f6c8dbd0 --- /dev/null +++ b/biscuit/apps/chronos/templates/chronos/edit_substitution.html @@ -0,0 +1,14 @@ +{% extends "core/base.html" %} +{% load bootstrap4 i18n %} + +{% block page_title %}{% blocktrans %}Edit substitution{% endblocktrans %}{% endblock %} + +{% block content %} + + <form method="post"> + {% csrf_token %} + {% bootstrap_form edit_substitution_form %} + <input type="submit" value="Edit" /> + </form> + +{% endblock %} diff --git a/biscuit/apps/chronos/urls.py b/biscuit/apps/chronos/urls.py index 4161fb3c..7a414cbf 100644 --- a/biscuit/apps/chronos/urls.py +++ b/biscuit/apps/chronos/urls.py @@ -7,4 +7,5 @@ urlpatterns = [ path('timetable', views.timetable, name='timetable'), path('lessons', views.lessons_day, name='lessons_day'), path('lessons/<when>', views.lessons_day, name='lessons_day_by_date') + path('substitutions/<id>/edit', views.edit_substitution, name='edit_substitution') ] diff --git a/biscuit/apps/chronos/views.py b/biscuit/apps/chronos/views.py index 7aa1e359..f0579acf 100644 --- a/biscuit/apps/chronos/views.py +++ b/biscuit/apps/chronos/views.py @@ -13,7 +13,7 @@ from django_tables2 import RequestConfig from biscuit.core.decorators import admin_required from biscuit.core.models import Group, Person -from .forms import SelectForm +from .forms import SelectForm, LessonSubstitutionForm from .models import LessonPeriod, TimePeriod, Room from .util import current_week, week_weekday_from_date from .tables import LessonsTable @@ -113,3 +113,24 @@ def lessons_day(request: HttpRequest, when: Optional[str] = None) -> HttpRespons context['lesson_periods'] = lesson_periods return render(request, 'chronos/lessons_day.html', context) + +@admin_required +def edit_substitution(request: HttpRequest, id_: int) -> HttpResponse: + context = {} + + substitution = get_object_or_404(Substitution, id=id_) + + edit_substitution_form = LessonSubstitutionForm(request.POST or None, instance=substitution) + + context['substitution'] = substitution + + if request.method == 'POST': + if edit_substitution_form.is_valid(): + edit_substitution_form.save(commit=True) + + messages.success(request, _('The substitution has been saved.')) + return redirect('edit_substitution_by_id', id_=substitution.id) + + context['edit_substitution_form'] = edit_substitution_form + + return render(request, 'chronos/edit_substitution.html', context) -- GitLab