Files
Flagman/schedule/views.py
Dmitriy 60b4e0e839 init
2025-06-23 01:24:34 +03:00

113 lines
4.5 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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})