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)