113 lines
4.5 KiB
Python
113 lines
4.5 KiB
Python
from django.shortcuts import render, redirect, get_object_or_404
|
||
from django.contrib.auth.decorators import login_required
|
||
from django.contrib import messages
|
||
from .models import Course, Lesson, LessonEnrollment
|
||
from .forms import LessonForm, EnrollmentForm
|
||
|
||
def schedule_list(request):
|
||
lessons = Lesson.objects.all().order_by('date', 'start_time')
|
||
return render(request, 'schedule/schedule_list.html', {'lessons': lessons})
|
||
|
||
@login_required
|
||
def course_detail(request, pk):
|
||
course = get_object_or_404(Course, pk=pk)
|
||
lessons = Lesson.objects.filter(course=course).order_by('start_time')
|
||
return render(request, 'schedule/course_detail.html', {
|
||
'course': course,
|
||
'lessons': lessons
|
||
})
|
||
|
||
@login_required
|
||
def lesson_detail(request, pk):
|
||
lesson = get_object_or_404(Lesson, pk=pk)
|
||
return render(request, 'schedule/lesson_detail.html', {'lesson': lesson})
|
||
|
||
@login_required
|
||
def create_lesson(request):
|
||
if not hasattr(request.user, 'instructor'):
|
||
messages.error(request, 'У вас нет прав для создания занятий.')
|
||
return redirect('schedule:list')
|
||
|
||
if request.method == 'POST':
|
||
form = LessonForm(request.POST)
|
||
if form.is_valid():
|
||
lesson = form.save(commit=False)
|
||
lesson.instructor = request.user.instructor
|
||
lesson.save()
|
||
messages.success(request, 'Занятие успешно создано.')
|
||
return redirect('schedule:list')
|
||
else:
|
||
form = LessonForm()
|
||
|
||
return render(request, 'schedule/lesson_form.html', {'form': form, 'action': 'create'})
|
||
|
||
@login_required
|
||
def update_lesson(request, pk):
|
||
lesson = get_object_or_404(Lesson, pk=pk)
|
||
|
||
if not hasattr(request.user, 'instructor') or lesson.instructor != request.user.instructor:
|
||
messages.error(request, 'У вас нет прав для редактирования этого занятия.')
|
||
return redirect('schedule:list')
|
||
|
||
if request.method == 'POST':
|
||
form = LessonForm(request.POST, instance=lesson)
|
||
if form.is_valid():
|
||
form.save()
|
||
messages.success(request, 'Занятие успешно обновлено.')
|
||
return redirect('schedule:list')
|
||
else:
|
||
form = LessonForm(instance=lesson)
|
||
|
||
return render(request, 'schedule/lesson_form.html', {'form': form, 'action': 'update'})
|
||
|
||
@login_required
|
||
def delete_lesson(request, pk):
|
||
lesson = get_object_or_404(Lesson, pk=pk)
|
||
|
||
if not hasattr(request.user, 'instructor') or lesson.instructor != request.user.instructor:
|
||
messages.error(request, 'У вас нет прав для удаления этого занятия.')
|
||
return redirect('schedule:list')
|
||
|
||
if request.method == 'POST':
|
||
lesson.delete()
|
||
messages.success(request, 'Занятие успешно удалено.')
|
||
return redirect('schedule:list')
|
||
|
||
return render(request, 'schedule/lesson_confirm_delete.html', {'lesson': lesson})
|
||
|
||
@login_required
|
||
def enroll_lesson(request, pk):
|
||
lesson = get_object_or_404(Lesson, pk=pk)
|
||
|
||
if not hasattr(request.user, 'student'):
|
||
messages.error(request, 'Только студенты могут записываться на занятия.')
|
||
return redirect('schedule:list')
|
||
|
||
if lesson.enrolled_students.count() >= lesson.max_students:
|
||
messages.error(request, 'К сожалению, все места на это занятие уже заняты.')
|
||
return redirect('schedule:list')
|
||
|
||
if request.user.student in lesson.enrolled_students.all():
|
||
messages.warning(request, 'Вы уже записаны на это занятие.')
|
||
else:
|
||
lesson.enrolled_students.add(request.user.student)
|
||
messages.success(request, 'Вы успешно записались на занятие.')
|
||
|
||
return redirect('schedule:detail', pk=pk)
|
||
|
||
@login_required
|
||
def enrollment_detail(request, pk):
|
||
enrollment = get_object_or_404(LessonEnrollment, pk=pk)
|
||
return render(request, 'schedule/enrollment_detail.html', {'enrollment': enrollment})
|
||
|
||
@login_required
|
||
def enrollment_create(request):
|
||
if request.method == 'POST':
|
||
form = EnrollmentForm(request.POST)
|
||
if form.is_valid():
|
||
enrollment = form.save()
|
||
messages.success(request, 'Запись на занятие успешно создана!')
|
||
return redirect('enrollment_detail', pk=enrollment.pk)
|
||
else:
|
||
form = EnrollmentForm()
|
||
return render(request, 'schedule/enrollment_form.html', {'form': form}) |