diff --git a/biscuit/apps/chronos/forms.py b/biscuit/apps/chronos/forms.py index 72c97eb2badfada6a5e2a84224efd7939bddbfba..2ad9b84de1c4a5ea1499dd31ea257dafd124726d 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 0000000000000000000000000000000000000000..f6c8dbd0079af20aea62129d65beb24db8f40f47 --- /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 4161fb3c33f52407f1a653635749feaf16976228..7a414cbffaaffff2e0cf0fc4990041e5b770cfbe 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 7aa1e35944ce4c95f579c18c6b630b0294269458..f0579acf729cadcecd2b60fe14b268b14b1463d5 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)