You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

252 lines
9.4 KiB

#! coding: utf-8
from django.contrib import admin
from django.db.models import Q
from django.http import HttpResponse
from access.models import User
from journals.models import TeacherJ, LessonJ, HomeworkJ, \
ExamJ, AchievementJ, HomeworkTry, \
ExamTry, CourseThemeJ, DiplomaJ, ReportDepth
from import_export.admin import ImportExportModelAdmin
def export_xls(modeladmin, request, queryset):
import xlwt
response = HttpResponse(content_type='application/ms-excel')
response['Content-Disposition'] = 'attachment; filename=report.xls'
wb = xlwt.Workbook(encoding='utf-8')
ws = wb.add_sheet("MyModel")
row_num = 0
columns = [
(u"ID Студента", 3000),
(u"ФИО", 6000),
(u"Email", 8000),
(u'Порядок темы урока', 1000),
(u'Тема урока', 16000),
(u'Порядок урока', 1000),
(u"Урок", 16000),
(u"ДЗ", 16000),
(u'Тема ДЗ', 16000),
(u'Порядок темы ДЗ', 1000),
(u"Преподаватель", 6000),
(u"Курс", 6000),
]
font_style = xlwt.XFStyle()
font_style.font.bold = True
for col_num in range(len(columns)):
ws.write(row_num, col_num, columns[col_num][0], font_style)
# set column width
ws.col(col_num).width = columns[col_num][1]
font_style = xlwt.XFStyle()
font_style.alignment.wrap = 1
for obj in queryset:
row_num += 1
row = [
obj.student.id if obj.student else '-',
obj.student.get_full_name() if obj.student else '-',
obj.student.email if obj.student else '-',
obj.lesson.theme.sort if obj.lesson else '-',
obj.lesson.theme.get_title() if obj.lesson else '-',
obj.lesson.sort if obj.lesson else '-',
obj.lesson.get_title() if obj.lesson else '-',
obj.homework.get_title() if obj.homework else '-',
obj.homework.theme.get_title() if obj.homework else '-',
obj.homework.theme.sort if obj.homework else '-',
obj.teacher.get_short_name() if obj.teacher else '-',
obj.course.get_title() if obj.course else '-',
]
for col_num in range(len(row)):
ws.write(row_num, col_num, row[col_num], font_style)
wb.save(response)
return response
export_xls.short_description = u"Export XLS"
def export_hw_journals(modeladmin, request, queryset):
import xlwt
response = HttpResponse(content_type='application/ms-excel')
response['Content-Disposition'] = 'attachment; filename=report.xls'
wb = xlwt.Workbook(encoding='utf-8')
ws = wb.add_sheet("MyModel")
row_num = 0
columns = [
(u"ID Студента", 3000),
(u"ФИО", 6000),
(u"Email", 8000),
(u'Порядок темы', 1000),
(u'Тема', 16000),
(u'Преподаватель', 1000)
]
font_style = xlwt.XFStyle()
font_style.font.bold = True
for col_num in range(len(columns)):
ws.write(row_num, col_num, columns[col_num][0], font_style)
# set column width
ws.col(col_num).width = columns[col_num][1]
font_style = xlwt.XFStyle()
font_style.alignment.wrap = 1
for obj in queryset:
row_num += 1
row = [
obj.student.id if obj.student else '-',
obj.student.get_full_name() if obj.student else '-',
obj.student.email if obj.student else '-',
obj.material.theme.sort if obj.material else '-',
obj.material.theme.get_title() if obj.material else '-',
obj.teacher.get_full_name() if obj.teacher else '-'
]
for col_num in range(len(row)):
ws.write(row_num, col_num, row[col_num], font_style)
wb.save(response)
return response
export_xls.short_description = u"Отчет по сдаче"
class TeacherJAdmin(admin.ModelAdmin):
list_display = ('get_student_name', 'get_student_email', 'lesson', 'homework', 'teacher', 'course', 'start_date', 'progress', )
search_fields = ['current_token', 'student__email', 'student__id']
list_filter = ['course', 'status']
filter_horizontal = ('waiting', )
actions = [export_xls]
def get_student_email(self, instance):
return instance.student.email if instance.student else ''
def get_student_name(self, instance):
return instance.student.get_full_name() if instance.student else ''
def formfield_for_foreignkey(self, db_field, request=None, **kwargs):
if db_field.name == "teacher":
kwargs["queryset"] = User.objects.filter(in_role='T')
return super(TeacherJAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)
admin.site.register(TeacherJ, TeacherJAdmin)
class LessonJAdmin(admin.ModelAdmin):
list_display = ('student', 'material', 'parent', 'success', 'date', 'f_date',)
list_filter = ['success', 'material__course', 'date', 'f_date']
raw_id_fields = ['parent', 'student']
search_fields = ['student__id', 'student__email']
def formfield_for_foreignkey(self, db_field, request=None, **kwargs):
if db_field.name == "teacher":
kwargs["queryset"] = User.objects.filter(in_role='T')
return super(LessonJAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)
admin.site.register(LessonJ, LessonJAdmin)
class HomeworkJAdmin(admin.ModelAdmin):
list_display = ('student', 'parent', 'get_courese_title', 'success', 'date', 'f_date', 'teacher', 'get_url', )
raw_id_fields = ['student', 'parent']
list_filter = ['material__course', 'success', 'date', 'f_date']
search_fields = ['student__email', 'student__id']
actions = [export_hw_journals]
def get_courese_title(self, instance):
return instance.material.course.get_title()
def formfield_for_foreignkey(self, db_field, request=None, **kwargs):
if db_field.name == "teacher":
kwargs["queryset"] = User.objects.filter(in_role='T')
return super(HomeworkJAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)
admin.site.register(HomeworkJ, HomeworkJAdmin)
class ExamJAdmin(admin.ModelAdmin):
list_display = ('student', 'date', 'f_date', 'success', 'teacher', 'get_url', )
list_filter = ['material__course', 'success', 'date', 'f_date']
search_fields = ['student__email']
def formfield_for_foreignkey(self, db_field, request=None, **kwargs):
if db_field.name == "teacher":
kwargs["queryset"] = User.objects.filter(in_role__in=['T'])
return super(ExamJAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)
admin.site.register(ExamJ, ExamJAdmin)
class HomeworkTryAdmin(admin.ModelAdmin):
list_display = ('student', 'get_status_flag', 'material', 'date', 'f_date', 'success', 'expired', 'teacher', 'parent', 'get_url',)
search_fields = ['student__email', 'parent__id', 'student__id']
list_filter = ('material__course', 'expired', 'date', 'f_date', )
raw_id_fields = ['student', 'parent']
filter_horizontal = ['comments']
def formfield_for_foreignkey(self, db_field, request=None, **kwargs):
if db_field.name == "teacher":
kwargs["queryset"] = User.objects.filter(in_role__in=['T'])
return super(HomeworkTryAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)
def get_status_flag(self, instance):
return instance.get_status()['title']
admin.site.register(HomeworkTry, HomeworkTryAdmin)
class ExamTryAdmin(admin.ModelAdmin):
list_display = ('parent', 'get_status_flag', 'student', 'date', 'f_date', 'success', 'expired', 'teacher')
search_fields = ['student__email', 'parent__id', 'student__id']
list_filter = ('material__course', 'expired', 'date', 'f_date')
raw_id_fields = ['student', 'parent']
def formfield_for_foreignkey(self, db_field, request=None, **kwargs):
if db_field.name == "teacher":
kwargs["queryset"] = User.objects.filter(in_role__in=['T'])
return super(ExamTryAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)
def get_status_flag(self, instance):
return instance.get_status()['title']
admin.site.register(ExamTry, ExamTryAdmin)
class CourseThemeJAdmin(admin.ModelAdmin):
list_display = ('id', 'material', 'parent', 'student', 'date', 'f_date', )
search_fields = ['student__email', 'student__id', 'material__title', 'material__id']
list_filter = ['material__course', 'success', 'date', 'f_date']
admin.site.register(CourseThemeJ, CourseThemeJAdmin)
class AchievementJAdmin(admin.ModelAdmin):
list_display = ('title', 'student', 'achievement', 'date', 'got',)
admin.site.register(AchievementJ, AchievementJAdmin)
class DiplomaJAdmin(admin.ModelAdmin):
list_display = ('parent', 'material', 'student', 'date', 'key', 'out_image', 'in_image', 'gen')
search_fields = ('key', 'student__email', 'student__fname', 'student__name', 'student__oname')
list_filter = ['material']
admin.site.register(DiplomaJ, DiplomaJAdmin)
class ReportDepthAdmin(admin.ModelAdmin):
list_display = ('token', 'student', 'teacher', 'course', 's_date', 'f_date', 'flag')
admin.site.register(ReportDepth, ReportDepthAdmin)