diff --git a/biscuit/apps/chronos/tables.py b/biscuit/apps/chronos/tables.py index 2492ca1f634e0c322aaab455e31e675458761f1e..38625021bd694e5b2a353a67fa8ef05c1b4939b4 100644 --- a/biscuit/apps/chronos/tables.py +++ b/biscuit/apps/chronos/tables.py @@ -26,8 +26,8 @@ class LessonsTable(tables.Table): lesson__teachers = tables.Column(accessor='lesson.teacher_names', verbose_name=_('Teachers')) lesson__subject = tables.Column(accessor='lesson.subject') room = tables.Column(accessor='room') - edit = tables.LinkColumn('edit_substitution_by_id', args=[A('id')]) + edit_substitution = tables.LinkColumn('edit_substitution_by_id', args=[A('id')], text=_('Substitution')) def __init__(self, week, *args, **kwargs): - self._week = week + self.edit_substitution.args.append(week) super().__init__(*args, **kwargs) diff --git a/biscuit/apps/chronos/urls.py b/biscuit/apps/chronos/urls.py index 6720c5c3e00d95176826fab273908686fba466ae..87e879b7a84ada0d14688c8e9c2f89ff0619f5cd 100644 --- a/biscuit/apps/chronos/urls.py +++ b/biscuit/apps/chronos/urls.py @@ -7,5 +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') + path('lessons/<int:id_>/<int:week>/substition', views.edit_substitution, name='edit_substitution') ] diff --git a/biscuit/apps/chronos/views.py b/biscuit/apps/chronos/views.py index f0579acf729cadcecd2b60fe14b268b14b1463d5..bbb56809e9d507c0dd93279effcbdb254cf5b424 100644 --- a/biscuit/apps/chronos/views.py +++ b/biscuit/apps/chronos/views.py @@ -14,8 +14,8 @@ from biscuit.core.decorators import admin_required from biscuit.core.models import Group, Person from .forms import SelectForm, LessonSubstitutionForm -from .models import LessonPeriod, TimePeriod, Room -from .util import current_week, week_weekday_from_date +from .models import LessonPeriod, TimePeriod, Room, LessonSubstitution +from .util import current_week, week_weekday_from_date, week_days from .tables import LessonsTable @@ -115,12 +115,16 @@ def lessons_day(request: HttpRequest, when: Optional[str] = None) -> HttpRespons return render(request, 'chronos/lessons_day.html', context) @admin_required -def edit_substitution(request: HttpRequest, id_: int) -> HttpResponse: +def edit_substitution(request: HttpRequest, id_: int, week: int) -> HttpResponse: context = {} - substitution = get_object_or_404(Substitution, id=id_) + lesson_period = get_object_or_404(LessonPeriod, id_) - edit_substitution_form = LessonSubstitutionForm(request.POST or None, instance=substitution) + lesson_substitution = LessonSubstitution.objects.filter(week=week, lesson_period=lesson_period).first() + if lesson_substitution: + edit_substitution_form = LessonSubstitutionForm(request.POST or None, instance=lesson_substitution) + else: + edit_substitution_form = LessonSubstitutionForm(request.POST or None, initial={'week': week, 'lesson_period': lesson_period}) context['substitution'] = substitution @@ -129,7 +133,7 @@ def edit_substitution(request: HttpRequest, id_: int) -> HttpResponse: edit_substitution_form.save(commit=True) messages.success(request, _('The substitution has been saved.')) - return redirect('edit_substitution_by_id', id_=substitution.id) + return redirect('lessons_day_by_date', when=week_days(week)[lesson_period.period.weekday].strftime('%Y-%m-%d')) context['edit_substitution_form'] = edit_substitution_form