78 lines
2.6 KiB
Python
78 lines
2.6 KiB
Python
from django.shortcuts import render
|
|
from django.contrib.auth.decorators import login_required, user_passes_test
|
|
from .models import CourseAnalytics, InstructorAnalytics, StudentAnalytics
|
|
from schedule.models import Course, Lesson, LessonEnrollment
|
|
from instructor.models import Instructor
|
|
from student.models import Student
|
|
import json
|
|
from django.http import HttpResponse
|
|
|
|
def is_admin(user):
|
|
return user.profile.user_type == 'admin'
|
|
|
|
@login_required
|
|
@user_passes_test(is_admin)
|
|
def analytics_dashboard(request):
|
|
course_analytics = CourseAnalytics.objects.all()
|
|
instructor_analytics = InstructorAnalytics.objects.all()
|
|
student_analytics = StudentAnalytics.objects.all()
|
|
|
|
return render(request, 'analytics/dashboard.html', {
|
|
'course_analytics': course_analytics,
|
|
'instructor_analytics': instructor_analytics,
|
|
'student_analytics': student_analytics
|
|
})
|
|
|
|
@login_required
|
|
@user_passes_test(is_admin)
|
|
def course_analytics(request):
|
|
courses = Course.objects.all()
|
|
analytics = CourseAnalytics.objects.filter(course__in=courses)
|
|
return render(request, 'analytics/course_analytics.html', {
|
|
'courses': courses,
|
|
'analytics': analytics
|
|
})
|
|
|
|
@login_required
|
|
@user_passes_test(is_admin)
|
|
def instructor_analytics(request):
|
|
instructors = Instructor.objects.all()
|
|
analytics = InstructorAnalytics.objects.filter(instructor__in=instructors)
|
|
return render(request, 'analytics/instructor_analytics.html', {
|
|
'instructors': instructors,
|
|
'analytics': analytics
|
|
})
|
|
|
|
@login_required
|
|
@user_passes_test(is_admin)
|
|
def student_analytics(request):
|
|
students = Student.objects.all()
|
|
analytics = StudentAnalytics.objects.filter(student__in=students)
|
|
return render(request, 'analytics/student_analytics.html', {
|
|
'students': students,
|
|
'analytics': analytics
|
|
})
|
|
|
|
@login_required
|
|
@user_passes_test(is_admin)
|
|
def generate_reports(request):
|
|
# Здесь будет логика генерации отчетов
|
|
return render(request, 'analytics/reports.html')
|
|
|
|
@login_required
|
|
@user_passes_test(is_admin)
|
|
def export_data(request):
|
|
data = {
|
|
'courses': list(Course.objects.values()),
|
|
'instructors': list(Instructor.objects.values()),
|
|
'students': list(Student.objects.values()),
|
|
'lessons': list(Lesson.objects.values()),
|
|
'enrollments': list(LessonEnrollment.objects.values())
|
|
}
|
|
|
|
response = HttpResponse(
|
|
json.dumps(data, ensure_ascii=False),
|
|
content_type='application/json'
|
|
)
|
|
response['Content-Disposition'] = 'attachment; filename="analytics_data.json"'
|
|
return response |