from django.shortcuts import render, redirect, get_object_or_404 from django.utils import translation from django.conf import settings from django.http import JsonResponse from django.contrib.admin.views.decorators import staff_member_required from django.contrib.auth.decorators import login_required from django.contrib.auth import logout from .models import Classroom, Subject, Teacher, Student from .forms import StudentRegistrationForm def index(request): # Fetch levels with their related subjects using prefetch_related for efficiency levels = Classroom.objects.prefetch_related('subjects').all() context = { 'levels': levels, } return render(request, 'core/index.html', context) def set_language(request, lang_code): next_url = request.GET.get('next', '/') response = redirect(next_url) if lang_code in [lang[0] for lang in settings.LANGUAGES]: translation.activate(lang_code) if hasattr(request, 'session'): request.session['_language'] = lang_code response.set_cookie(settings.LANGUAGE_COOKIE_NAME, lang_code) return response def subject_detail(request, pk): subject = get_object_or_404(Subject, pk=pk) return render(request, 'core/subject_detail.html', {'subject': subject}) @staff_member_required def get_subjects_by_level(request): level_id = request.GET.get('level_id') or request.GET.get('classroom_id') if not level_id: return JsonResponse([], safe=False) subjects = Subject.objects.filter(classroom_id=level_id).values('id', 'name_en', 'name_ar') return JsonResponse(list(subjects), safe=False) def get_classroom_subjects(request): """Public endpoint for registration form""" classroom_id = request.GET.get('classroom_id') if not classroom_id: return JsonResponse([], safe=False) subjects = Subject.objects.filter(classroom_id=classroom_id).values('id', 'name_en', 'price') return JsonResponse(list(subjects), safe=False) def register_student(request): if request.method == 'POST': form = StudentRegistrationForm(request.POST, request.FILES) if form.is_valid(): student = form.save() # Redirect to success page or login return redirect('index') # Placeholder else: form = StudentRegistrationForm() return render(request, 'core/registration.html', {'form': form}) @login_required def profile(request): try: student_profile = request.user.student_profile except Student.DoesNotExist: student_profile = None return render(request, 'core/profile.html', {'student_profile': student_profile}) def custom_logout(request): logout(request) return redirect('index')