class HomeWorkHandler(PermissionHandler, StarkHandler): def display_content(self, obj=None, is_header=None, *args, **kwargs): if is_header: return '详情' record_url = reverse('stark:crm_homework_content', kwargs={'homework_id': obj.pk}) return mark_safe('<a target="_blank" href="%s">详情</a>' % record_url) def display_record(self, obj=None, is_header=None, *args, **kwargs): if is_header: return '上交记录' record_url = reverse('stark:crm_homeworkrecord_list', kwargs={'homework_id': obj.pk}) return mark_safe('<a href="%s">记录</a>' % record_url) list_display = ['title', "course_record", get_datetime_text("创建时间", "create_date"), get_datetime_text("截止时间", "hand_in_date"), display_content,display_record] def get_urls(self): patterns = [ url(r'^list/(?P<course_record_id>\d+)/$', self.wrapper(self.changelist_view), name=self.get_list_url_name), url(r'^add/(?P<course_record_id>\d+)/$', self.wrapper(self.add_view), name=self.get_add_url_name), url(r'^change/(?P<course_record_id>\d+)/(?P<pk>\d+)/$', self.wrapper(self.change_view), name=self.get_change_url_name), url(r'^delete/(?P<course_record_id>\d+)/(?P<pk>\d+)/$', self.wrapper(self.delete_view), name=self.get_delete_url_name), url(r'^content/(?P<homework_id>\d+)/$', self.wrapper(self.content_view), name=self.get_url_name('content')), ] patterns.extend(self.extra_urls()) return patterns model_form_class = HomeWorkModelForm def save(self, request, form, is_update, *args, **kwargs): course_record_id = kwargs.get('course_record_id') if not is_update: form.instance.course_record_id = course_record_id form.save() def display_edit_del(self, obj=None, is_header=None, *args, **kwargs): if is_header: return '操作' course_record_id = kwargs.get('course_record_id') tpl = '<a href="%s">编辑</a> <a href="%s">删除</a>' % ( self.reverse_change_url(pk=obj.pk, course_record_id=course_record_id), self.reverse_delete_url(pk=obj.pk, course_record_id=course_record_id)) return mark_safe(tpl) def content_view(self, request, homework_id, *args, **kwargs): homework = models.HomeWork.objects.filter(pk=homework_id).first() return render(request, "homework_content.html", {"homework": homework}) def get_queryset(self, request, *args, **kwargs): course_record_id = kwargs.get('course_record_id') return self.model_class.objects.filter(course_record_id=course_record_id)
class ClassListHandler(PermissionHandler, StarkHandler): def display_course(self, obj=None, is_header=None, *args, **kwargs): if is_header: return '班级' return '%s (%s)期' % ( obj.course.name, obj.semester, ) def display_course_record(self, obj=None, is_header=None, *args, **kwargs): if is_header: return '上课记录' record_url = reverse('stark:web_courserecord_list', kwargs={'class_id': obj.pk}) # 带上id 反向生成别名 return mark_safe('<a target="_blank" href="%s">上课记录</a>' % record_url) list_display = [ 'school', display_course, get_datetime_text('开班日期', 'start_date'), 'class_teacher', get_m2m_text('老师', 'tech_teacher'), display_course_record, ] # 自定义显示 model_form_class = ClassListModelForm # 自定义的样式(时间格式) # 加上组合搜索 search_group = [ Option(field='school'), Option(field='course'), ]
class ClassListHandler(PermissionHandler,StarkHandler): def display_course(self, obj=None, is_header=None,*args,**kwargs): if is_header: return '班级' return "%s %s期" % (obj.course.name, obj.semester) def display_course_record(self, obj=None, is_header=None, *args, **kwargs): if is_header: return '上课记录' record_url = reverse('stark:web_courserecord_list', kwargs={'class_id': obj.pk}) return mark_safe('<a target="_blank" href="%s">上课记录</a>'% record_url) list_display = [ 'school', display_course, 'price', get_datetime_text('开班日期','start_date'), 'class_teacher', get_m2m_text('任课老师','tech_teachers'), display_course_record ] model_form_class = ClassListModelForm search_group = [ Option('school'), Option('course') ]
class CourseRecordHandler(PermissionHandler, StarkHandler): # 老师查看或添加自己某个学生所有的课堂反馈 search_group = [Option('status')] model_form_class = CourseRecordModelForm list_display = [ 'student', 'course', 'record_num', get_datetime_text('上课时间', 'date'), get_choice_text('状态', 'status') ] def display_edit(self, obj=None, is_header=None, *args, **kwargs): """ 自定义页面显示的列(表头和内容) :param obj: :param is_header: :return: """ if is_header: return "编辑" return mark_safe('<a href="%s">编辑</a>' % self.reverse_change_url( pk=obj.pk, student_id=kwargs['student_id'])) def get_urls(self): patterns = [ re_path(r'^list/(?P<student_id>\d+)$', self.wrapper(self.changelist_view), name=self.get_list_url_name), re_path(r'^add/(?P<student_id>\d+)$', self.wrapper(self.add_view), name=self.get_add_url_name), re_path(r'^change/(?P<student_id>\d+)/(?P<pk>\d+)/$', self.wrapper(self.change_view), name=self.get_change_url_name), ] return patterns def display_edit_del(self, obj=None, is_header=None, *args, **kwargs): if is_header: return '操作' tpl = '<a href="%s">反馈详细信息</a>' % (self.reverse_change_url( pk=obj.pk, student_id=kwargs['student_id'])) return mark_safe(tpl) def get_queryset(self, request, *args, **kwargs): return self.model_class.objects.filter(student_id=kwargs['student_id']) def save(self, request, form, is_update, *args, **kwargs): if form.instance.status == settings.RECORD_CHECKED: return HttpResponse("已审核过的课堂反馈不可以被修改!") if is_update: form.instance.status = settings.RECORD_UNCHECKED form.instance.student_id = kwargs['student_id'] form.instance.teacher_id = request.session['user_id'] form.save()
class CheckPaymentRecordHandler(PermissionHandler, StarkHandler): order_list = ['-id', 'confirm_status'] list_display = [ StarkHandler.display_checkbox, 'customer', get_choice_text('缴费类型', 'pay_type'), 'paid_fee', 'classes', get_datetime_text('申请日期', 'apply_date'), get_choice_text('状态', 'confirm_status'), 'consultant' ] has_add_btn = False def get_urls(self): patterns = [ url(r'^list/$', self.wrapper(self.changelist_view), name=self.get_list_url_name), ] patterns.extend(self.extra_urls()) return patterns def action_multi_confirm(self, request, *args, **kwargs): """ 批量确认 :param request: :param args: :param kwargs: :return: """ pk_list = request.POST.getlist('pk') # 缴费记录 # 客户表 # 学生表 for pk in pk_list: payment_object = self.model_class.objects.filter( id=pk, confirm_status=1).first() if not payment_object: continue payment_object.confirm_status = 2 payment_object.save() payment_object.customer.status = 1 payment_object.customer.save() payment_object.customer.student.student_status = 2 payment_object.customer.student.save() action_multi_confirm.text = '批量确认' def action_multi_cancel(self, request, *args, **kwargs): pk_list = request.POST.getlist('pk') self.model_class.objects.filter( id__in=pk_list, confirm_status=1).update(confirm_status=3) action_multi_cancel.text = '批量驳回' action_list = [action_multi_confirm, action_multi_cancel]
class ClassListHandler(StarkHandler): def display_course(self, obj=None, is_header=None): if is_header: return '班级' return "%s %s期" % (obj.course.name, obj.semester) list_display = [ 'school', display_course, 'price', get_datetime_text('开班日期', 'start_date'), 'class_teacher', get_m2m_text('任课老师', 'tech_teachers') ] model_form_class = ClassListModelForm search_group = [Option('school'), Option('course')]
class ClassListHandler(StarkHandler): """ 班级模型视图函数处理类 """ # 页面显示课程信息 def display_course(self, obj=None, is_header=None): """ 页面显示课程信息 :param obj: :param is_header: :return: """ if is_header: return '班级' return '%s %s期' % (obj.course.name, obj.semester) # 页面显示上课记录 def display_course_record(self, obj=None, is_header=None, *args, **kwargs): """ 页面显示上课记录 :param obj: :param is_header: :param args: :param kwargs: """ if is_header: return '上课记录' record_url = reverse('stark:web-courserecord-list', kwargs={'class_id': obj.pk}) return mark_safe('<a target="_blank" href="%s">查看上课记录</a>' % \ record_url) display_list = [ 'school', display_course, 'price', get_datetime_text('开班日期', 'start_date'), 'class_teacher', get_m2m_text('任课老师', 'tech_teachers'), display_course_record, ] model_form_class = ClassListModelForm search_group = [ Option('school'), Option('course'), ]
class StuCourseRecordHandler(PermissionHandler, StarkHandler): # 学生查看自己的课堂反馈 has_add_btn = False search_list = ['course__name__contains', 'teacher__nickname__contains'] def display_edit_del(self, obj=None, is_header=None, *args, **kwargs): if is_header: return '操作' tpl = '<a href="%s" target="_blank">反馈详细信息</a>' % self.reverse_record_detail_url( pk=obj.pk) return mark_safe(tpl) list_display = [ 'teacher', 'course', 'record_num', get_datetime_text('上课时间', 'date') ] def get_urls(self): patterns = [ re_path(r'^list/$', self.wrapper(self.changelist_view), name=self.get_list_url_name), re_path(r'^list/(?P<pk>\d+)/$', self.wrapper(self.record_detail), name=self.get_record_detail_url_name), ] return patterns @property def get_record_detail_url_name(self): return self.get_url_name('stu_record_detail') def reverse_record_detail_url(self, *args, **kwargs): return self.reverse_commons_url(self.get_record_detail_url_name, *args, **kwargs) def record_detail(self, request, pk): record = models.CourseRecord.objects.filter(id=pk).first() return render(request, 'course_record.html', {'record': record}) def get_queryset(self, request, *args, **kwargs): current_user_id = request.session['user_id'] return self.model_class.objects.filter(student_id=current_user_id, status=settings.RECORD_CHECKED)
class ClasslistHandler(PermissionHandler, StarkHandler): def display_course(self, obj=None, is_header=None): if is_header: return "班级" return "%s %s 期" % ( obj.course.name, obj.semester, ) # list_display = ['school',display_course,'course','semester'] list_display = [ 'school', display_course, 'price', get_datetime_text('开班日期', 'start_date'), 'class_teacher', get_m2m_text('任课老师', 'tech_teachers') ] model_form_class = ClassListModelForm
class CourseRecordHandler(StarkHandler): list_display = [ 'class_object', 'day_num', 'teacher', get_datetime_text('日期', 'date') ] model_form_class = CourseRecordModelForm def display_edit_del(self, obj=None, is_header=None, *args, **kwargs): if is_header: return '操作' class_id = kwargs.get('class_id') tpl = '<a href="%s">编辑</a> <a href="%s">删除</a>' % ( self.reverse_change_url(pk=obj.pk, class_id=class_id), self.reverse_delete_url(pk=obj.pk, class_id=class_id)) return mark_safe(tpl) def get_urls(self): patterns = [ url(r'^list/(?P<class_id>\d+)/$', self.wrapper(self.changelist_view), name=self.get_list_url_name), url(r'^add/(?P<class_id>\d+)/$', self.wrapper(self.add_view), name=self.get_add_url_name), url(r'^change/(?P<class_id>\d+)/(?P<pk>\d+)/$', self.wrapper(self.change_view), name=self.get_change_url_name), url(r'^delete/(?P<class_id>\d+)/(?P<pk>\d+)/$', self.wrapper(self.delete_view), name=self.get_delete_url_name), ] patterns.extend(self.extra_urls()) return patterns def get_queryset(self, request, *args, **kwargs): class_id = kwargs.get("class_id") return self.model_class.objects.filter(class_object_id=class_id) def form_database_save(self, request, form, is_update, *args, **kwargs): if not is_update: class_id = kwargs.get('class_id') form.instance.class_object_id = class_id form.save()
class ConsultRecordHandler(StarkHandler): change_list_template = 'consult_record.html' def display_edit_del(self, obj=None, is_header=None, *args, **kwargs): if is_header: return '操作' customer_id = kwargs.get('customer_id') tpl = '<a href="%s">编辑</a> <a href="%s">删除</a>' % ( self.reverse_change_url(pk=obj.pk, customer_id=customer_id), self.reverse_delete_url(pk=obj.pk, customer_id=customer_id)) return mark_safe(tpl) list_display = ['note', 'consultant', get_datetime_text("日期", 'date')] model_form_class = ConsultRecordModelForm def get_urls(self): patterns = [ url(r'^list/(?P<customer_id>\d+)/$', self.wrapper(self.changelist_view), name=self.get_list_url_name), url(r'^add/(?P<customer_id>\d+)/$', self.wrapper(self.add_view), name=self.get_add_url_name), url(r'^change/(?P<customer_id>\d+)/(?P<pk>\d+)/$', self.wrapper(self.change_view), name=self.get_change_url_name), url(r'^delete/(?P<customer_id>\d+)/(?P<pk>\d+)/$', self.wrapper(self.delete_view), name=self.get_delete_url_name), ] patterns.extend(self.extra_urls()) return patterns def get_queryset(self, request, *args, **kwargs): customer_id = kwargs.get('customer_id') current_user_id = request.session['user_info']['id'] return self.model_class.objects.filter( customer_id=customer_id, customer__consultant_id=current_user_id) def form_database_save(self, request, form, is_update, *args, **kwargs): customer_id = kwargs.get('customer_id') current_user_id = request.session['user_info']['id'] object_exists = models.Customer.objects.filter( id=customer_id, consultant_id=current_user_id).exists() if not object_exists: return HttpResponse('非法操作') if not is_update: form.instance.customer_id = customer_id form.instance.consultant_id = current_user_id form.save() def get_change_object(self, request, pk, *args, **kwargs): current_user_id = request.session['user_info']['id'] customer_id = kwargs.get('customer_id') return models.ConsultRecord.objects.filter( pk=pk, customer_id=customer_id, customer__consultant_id=current_user_id).first() def delete_object(self, request, pk, *args, **kwargs): current_user_id = request.session['user_info']['id'] customer_id = kwargs.get('customer_id') record_queryset = models.ConsultRecord.objects.filter( pk=pk, customer_id=customer_id, customer__consultant_id=current_user_id) if not record_queryset.exists(): return HttpResponse('要删除的记录不存在') record_queryset.delete()
class CourseRecordHandler(StarkHandler): model_form_class = CourseRecordModelForm def display_attendance(self, obj=None, is_header=None, *args, **kwargs): if is_header: return '考勤' name = "%s:%s" % ( self.site.namespace, self.get_url_name('attendance'), ) attendance_url = reverse(name, kwargs={'course_record_id': obj.pk}) tpl = '<a target="_blank" href="%s">考勤</a>' % attendance_url return mark_safe(tpl) list_display = [ StarkHandler.display_checkbox, 'class_object', 'day_num', 'teacher', get_datetime_text('时间', 'date'), display_attendance ] def display_edit_del(self, obj=None, is_header=None, *args, **kwargs): if is_header: return '操作' class_id = kwargs.get('class_id') tpl = '<a href="%s">编辑</a> <a href="%s">删除</a>' % ( self.reverse_change_url(pk=obj.pk, class_id=class_id), self.reverse_delete_url(pk=obj.pk, class_id=class_id)) return mark_safe(tpl) def get_urls(self): patterns = [ url(r'^list/(?P<class_id>\d+)/$', self.wrapper(self.changelist_view), name=self.get_list_url_name), url(r'^add/(?P<class_id>\d+)/$', self.wrapper(self.add_view), name=self.get_add_url_name), url(r'^change/(?P<class_id>\d+)/(?P<pk>\d+)/$', self.wrapper(self.change_view), name=self.get_change_url_name), url(r'^delete/(?P<class_id>\d+)/(?P<pk>\d+)/$', self.wrapper(self.delete_view), name=self.get_delete_url_name), url(r'^attendance/(?P<course_record_id>\d+)/$', self.wrapper(self.attendance_view), name=self.get_url_name('attendance')), ] patterns.extend(self.extra_urls()) return patterns def get_queryset(self, request, *args, **kwargs): class_id = kwargs.get('class_id') return self.model_class.objects.filter(class_object_id=class_id) def save(self, request, form, is_update, *args, **kwargs): class_id = kwargs.get('class_id') if not is_update: form.instance.class_object_id = class_id form.save() def action_multi_init(self, request, *args, **kwargs): course_record_id_list = request.POST.getlist('pk') class_id = kwargs.get('class_id') class_object = models.ClassList.objects.filter(id=class_id).first() if not class_object: return HttpResponse('班级不存在') student_object_list = class_object.student_set.all() for course_record_id in course_record_id_list: # 判断上课记录是否合法 course_record_object = models.CourseRecord.objects.filter( id=course_record_id, class_object_id=class_id).first() if not course_record_object: continue # 判断此上课记录的考勤记录是否已经存在 study_record_exists = models.StudyRecord.objects.filter( course_record=course_record_object).exists() if study_record_exists: continue # 为每个学生在该天创建考勤记录 study_record_object_list = [ models.StudyRecord(student_id=stu.id, course_record_id=course_record_id) for stu in student_object_list ] models.StudyRecord.objects.bulk_create(study_record_object_list, batch_size=50) action_multi_init.text = '批量初始化考勤' action_list = [ action_multi_init, ] def attendance_view(self, request, course_record_id, *args, **kwargs): """ 考勤的批量操作 :param request: :param course_record_id: :param args: :param kwargs: :return: """ study_record_object_list = models.StudyRecord.objects.filter( course_record_id=course_record_id) study_model_formset = modelformset_factory(models.StudyRecord, form=StudyRecordModelForm, extra=0) if request.method == 'POST': formset = study_model_formset(queryset=study_record_object_list, data=request.POST) if formset.is_valid(): formset.save() return render(request, 'attendance.html', {'formset': formset}) formset = study_model_formset(queryset=study_record_object_list) return render(request, 'attendance.html', {'formset': formset})
class HomeworkHandler(PermissionHandler, StarkHandler): def display_edit_del(self, obj=None, is_header=None, *args, **kwargs): if is_header: return '操作' classes_id = kwargs.get('classes_id') tpl = '<a href="%s">编辑</a> <a href="%s">删除</a>' % ( self.reverse_change_url(pk=obj.pk, classes_id=classes_id), self.reverse_delete_url(pk=obj.pk, classes_id=classes_id)) return mark_safe(tpl) def get_homeworkscore(self, obj, is_header, *args, **kwargs): if is_header: return '成绩' homework_score_url = name2url(self.site.namespace, self.get_url_name('homeworkscore'), classes_id=kwargs.get('classes_id'), homework_id=obj.pk) return mark_safe("<a target='_blank' href='%s'>成绩</a>" % homework_score_url) @property def get_homeworkscore_url_name(self): return self.get_url_name('homeworkscore') def multi_init_score_system(self, request, *args, **kwargs): homework_id_list = request.POST.getlist('pk') classes_id = kwargs.get('classes_id') classes_obj = Classes.objects.filter(id=classes_id).first() if not classes_id: return HttpResponse('班级不存在') student_queryset = classes_obj.student_set.all() for homework_id in homework_id_list: if not Homework.objects.filter(id=homework_id).exists(): continue if HomeworkScore.objects.filter(homework_id=homework_id).exists(): continue homeworkscore_list = [ HomeworkScore(homework_id=homework_id, student_id=student.id, classes_id=classes_id) for student in student_queryset ] HomeworkScore.objects.bulk_create(homeworkscore_list, batch_size=50) multi_init_score_system.text = '批量初始化作业成绩' def homeworkscore_view(self, request, *args, **kwargs): homework_id = kwargs.get('homework_id') classes_id = kwargs.get('classes_id') homeworkscore_list = HomeworkScore.objects.filter( homework_id=homework_id, classes_id=classes_id) form_class = modelformset_factory(model=HomeworkScore, form=HomeworkScoreModelForm, extra=0) if request.method == 'POST': formset = form_class(queryset=homeworkscore_list, data=request.POST) if formset.is_valid(): formset.save() return render(request, 'homeworkscore.html', {'formset': formset}) formset = form_class(queryset=homeworkscore_list) return render(request, 'homeworkscore.html', {'formset': formset}) def get_urls(self): patterns = [ url(r'^list/(?P<classes_id>\d+)$', self.wrapper(self.changelist_view), name=self.get_list_url_name), url(r'^add/(?P<classes_id>\d+)$', self.wrapper(self.add_view), name=self.get_add_url_name), url(r'^change/(?P<classes_id>\d+)/(?P<pk>\d+)/$', self.wrapper(self.change_view), name=self.get_change_url_name), url(r'^delete/(?P<classes_id>\d+)/(?P<pk>\d+)/$', self.wrapper(self.delete_view), name=self.get_delete_url_name), url(r'^score/(?P<classes_id>\d+)/(?P<homework_id>\d+)/$', self.wrapper(self.homeworkscore_view), name=self.get_homeworkscore_url_name), ] return patterns def get_queryset(self, request, *args, **kwargs): classes_id = kwargs.get('classes_id') return Homework.objects.filter(classes_id=classes_id) def save(self, form, is_update, *args, **kwargs): classes_id = kwargs.get('classes_id') form.instance.classes_id = classes_id form.save() model_form_class = HomeworkModelForm list_display = [ StarkHandler.display_checkbox, 'classes', 'title', get_datetime_text('发布日期', 'publish_date'), get_homeworkscore ] action_list = [multi_init_score_system]
class RentalRecordHandler(StarkHandler): list_display = [ 'computer', 'user', get_choice_text('状态', 'rental_status'), get_datetime_text('借出/归还时间', 'rental_time'), 'note' ] def display_edit_del(self, obj=None, is_header=None, *args, **kwargs): if is_header: return '操作' computer_id = kwargs.get('computer_id') tpl = '<a class="btn btn-sm btn-warning" href="%s">编辑</a> <a class="btn btn-sm btn-danger" href="%s">删除</a>' % ( self.reverse_change_url(pk=obj.pk, computer_id=computer_id), self.reverse_delete_url(pk=obj.pk, computer_id=computer_id)) return mark_safe(tpl) model_form_class = RentalRecordModelForm def get_urls(self): patterns = [ url(r'^list/(?P<computer_id>\d+)/$', self.wrapper(self.changelist_view), name=self.get_list_url_name), url(r'^add/(?P<computer_id>\d+)/$', self.wrapper(self.add_view), name=self.get_add_url_name), url(r'^change/(?P<computer_id>\d+)/(?P<pk>\d+)/$', self.wrapper(self.change_view), name=self.get_change_url_name), url(r'^delete/(?P<computer_id>\d+)/(?P<pk>\d+)/$', self.wrapper(self.delete_view), name=self.get_delete_url_name), ] patterns.extend(self.extra_urls()) return patterns def get_add_btn(self, request, *args, **kwargs): computer_id = kwargs.get('computer_id') computer_obj = models.Computer.objects.filter( id=computer_id).values('status') if computer_obj[0].get('status') == 3: return None if self.has_add_btn: # 根据别名反向生成URL return '<a class="btn btn-success" href="%s">添加</a>' % self.reverse_add_url( *args, **kwargs) return None def get_queryset(self, request, *args, **kwargs): computer_id = kwargs.get('computer_id') return self.model_class.objects.filter(computer_id=computer_id) def form_database_save(self, request, form, is_update, *args, **kwargs): computer_id = kwargs.get("computer_id") rental_status = request.POST.get("rental_status") print(rental_status, type(rental_status)) if not is_update: form.instance.computer_id = computer_id form.save() computer_obj = models.Computer.objects.filter(id=computer_id) if int(rental_status) == 1: computer_obj.update(status=1) elif int(rental_status) == 2: computer_obj.update(status=2)
class ClassesHandler(PermissionHandler, StarkHandler): def display_classes(self, obj, is_header, *args, **kwargs): if is_header: return '班级' return str(obj) def display_course_record(self, obj, is_header, *args, **kwargs): if is_header: return '上课记录' class_course_record_url = name2url(self.site.namespace, 'academy_courserecord_list', classes_id=obj.pk) return mark_safe("<a target='_blank' href='%s'>上课记录</a>" % (class_course_record_url)) def display_homework(self, obj, is_header, *args, **kwargs): if is_header: return '班级作业' new_url = name2url(self.site.namespace, 'academy_homework_list', classes_id=obj.pk) return mark_safe("<a target='_blank' href='%s'>班级作业</a>" % new_url) def get_queryset(self, request, *args, **kwargs): user_id = request.session['user_info']['id'] id_queryset = UserInfo.objects.filter(id=user_id).first().roles.all().values_list('id') user_role_id_list = [item[0] for item in id_queryset] if 10 in user_role_id_list: #该用户是老师 return UserInfo.objects.filter(id=user_id).first().classes.all() return super().get_queryset(request, *args, **kwargs) model_form_class = ClassesModelForm list_display = ['school', display_classes, get_m2m_text('老师', 'teacher'), 'price', get_datetime_text('开班日期', 'start_date'), display_course_record, display_homework] search_group = [Option('course')]
class CheckPaymentRecordHandler(StarkHandler): """ 缴费申请审批相关视图函数处理类 """ def get_display_list(self): value = [] if self.display_list: value.extend(self.display_list) return value def get_add_btn(self, request, *args, **kwargs): return None def get_urls(self): patterns = [ url(r'^list/$', self.wrapper(self.list_view), name=self.get_list_url_name), # url(r'^add/$', self.wrapper(self.add_view), # name=self.get_add_url_name), # url(r'^edit/(?P<pk>\d+)/$', self.wrapper(self.edit_view), # name=self.get_edit_url_name), # url(r'^del/(?P<pk>\d+)/$', self.wrapper(self.del_view), # name=self.get_del_url_name), ] patterns.extend(self.extra_urls()) return patterns # 批量确认缴费申请 def action_multi_confirm(self, request, *args, **kwargs): """ 批量确认缴费申请 :param request: :param args: :param kwargs: :return: """ pk_list = request.POST.getlist('pk') # 确认缴费申请 # 确认客户 # 确认学员 for pk in pk_list: payment_obj = self.model_class.objects.filter( id=pk, confirm_status=1).first() if not payment_obj: continue payment_obj.confirm_status = 2 payment_obj.save() payment_obj.customer.status = 1 payment_obj.customer.save() payment_obj.customer.student.status = 2 payment_obj.customer.student.save() action_multi_confirm.text = '批量确认' # 批量驳回缴费申请 def action_multi_cancel(self, request, *args, **kwargs): """ 批量驳回缴费申请 :param request: :param args: :param kwargs: :return: """ pk_list = request.POST.getlist('pk') self.model_class.objects.filter( id__in=pk_list, confirm_status=1).update(confirm_status=3) action_multi_cancel.text = '批量驳回' order_list = ['-id', 'confirm_status'] display_list = [ StarkHandler.display_checkbox, 'customer', get_choice_text('缴费类型', 'pay_type'), 'paid_fee', 'class_list', get_datetime_text('申请日期', 'apply_date'), get_choice_text('缴费状态', 'confirm_status'), 'consultant', ] action_list = [action_multi_confirm, action_multi_cancel]
class PlanAgentHandler(StarkHandler): """ 代理公司视图 """ model_form_class = PlanAgentModelForm # 记住这里到时添加一下用户的id,进行过滤,必须是本公司的船,才能添加 def save(self, form, request, is_update, *args, **kwargs): ship_id = kwargs.get('ship_id') user_id = 1 obj = models.Plan.objects.filter(ship_id=ship_id).first() if not is_update: # 判断是否为更新 if obj: title_id = form.instance.title_id # 获取船舶计划名称的id form.instance.ship_id = ship_id form.instance.boat_status_id = title_id # 船舶计划表添加船舶状态信息 form.instance.agent_id = user_id # 添加添加人的信息 form.instance.save() form.instance.ship.boat_status_id = title_id # 在船舶表里添加船舶状态信息 form.instance.ship.save() return HttpResponse('非法输入!!!') form.save() # 如果为更新就直接保存 def get_urls(self): """ 生成URL :return: """ patterns = [ re_path(r'^list/(?P<ship_id>\d+)/$', self.wrapper(self.changelist_view), name=self.get_list_url_name), re_path(r'^add/(?P<ship_id>\d+)/$', self.wrapper(self.add_view), name=self.get_add_url_name), re_path(r'^delete/(?P<pk>\d+)/(?P<ship_id>\d+)/$', self.wrapper(self.delete_view), name=self.get_delete_url_name), ] patterns.extend(self.extra_urls()) return patterns def display_location(self, obj=None, is_header=None, *args, **kwargs): if is_header: return '停靠地点' location = obj.location if not location: return '%s' % obj.next_port return '%s--%s' % (obj.location, obj.next_port) def display_del(self, obj=None, is_header=None, *args, **kwargs): if is_header: return "删除" ship_id = kwargs.get('ship_id') return mark_safe('<a href="%s">删除</a>' % self.reverse_delete_url(pk=obj.pk, ship_id=ship_id)) # 去掉编辑按钮 def get_list_display(self, request, *args, **kwargs): """ 获取页面上应该显示的列,预留的自定义扩展,例如:以后根据用户的不同显示不同的列 :return: """ value = [] if self.list_display: value.extend(self.list_display) value.append(type(self).display_del) return value list_display = [ 'ship', 'title', get_datetime_text('计划时间', 'move_time', time_format='%Y-%m-%d %H:%M'), display_location, 'boat_status' ] def delete_view(self, request, pk, *args, **kwargs): """ 删除页面 :param request: :param pk: :return: """ origin_list_url = self.reverse_list_url(*args, **kwargs) if request.method == 'GET': return render(request, self.delete_template or 'stark/delete.html', {'cancel': origin_list_url}) obj = models.Plan.objects.filter(pk=pk, boat_status=6).first() # 如果工单已经完成就不能删除 if obj: obj.update(display=2) return redirect(origin_list_url) self.model_class.objects.filter(pk=pk).delete() return redirect(origin_list_url) # 后期加上代理公司进行过滤 def get_query_set(self, request, *args, **kwargs): return self.model_class.objects.filter(display=1)
class CheckPaymentRecordHandler(StarkHandler): order_list = ['confirm_status','-id'] list_display = [StarkHandler.display_checkbox,'customer',get_choice_text('缴费类型','pay_type'),'paid_fee','class_list',get_datetime_text('申请日期','apply_date'),get_choice_text('状态','confirm_status'),'consultant'] def get_urls(self): patterns = [ url(r'^list/$', self.wrapper(self.changelist_view), name=self.get_list_url_name), ] patterns.extend(self.extra_urls()) return patterns def get_list_display(self): """ 不展示操作(编辑,删除列) :return: """ value = [] if self.list_display: value.extend(self.list_display) return value has_add_btn = False def action_multi_confirm(self, request, *args, **kwargs): """ 批量确认 :param request: :param args: :param kwargs: :return: """ pk_list = request.POST.getlist('pk') # 缴费记录表 # 客户表 # 学生表 for pk in pk_list: # 缴费记录表 payment_object = self.model_class.objects.filter(id=pk,confirm_status=1).first() if not payment_object: continue payment_object.confirm_status = 2 payment_object.save() # 客户表 payment_object.customer.status = 1 payment_object.customer.save() # 学生表 payment_object.customer.student.student_status = 2 # One2One 表名小写反向关联学生信息 payment_object.customer.student.save() action_multi_confirm.text = '批量确认' def action_multi_cancel(self, request, *args, **kwargs): pk_list = request.POST.getlist('pk') self.model_class.objects.filter(id__in=pk_list,confirm_status=1).update(confirm_status=3) action_multi_cancel.text = '批量驳回' action_list = [action_multi_confirm,action_multi_cancel,] search_group = [ Option(field='confirm_status'), Option(field='class_list') ]
class PublicCustomerHandler(PermissionHandler, StarkHandler): # 公户 model_form_class = PublicCustomerModelForm def action_multi_apply(self, request, *args, **kwargs): """ 批量申请到私户 :return: """ # 客户id pk_list = request.POST.getlist('pk') # 更新到我的私户(consultant=当前自己的id) ######这里还要改 current_user_id = request.session['user_info']['id'] # 限制 如过大于150人 就不可以申请到私户 private_customer_count = models.Customer.objects.filter( consultant__id=current_user_id, status=2).count() if (private_customer_count + len(pk_list)) > models.Customer.MAX_PRIVATE_COUNT: return HttpResponse( "私户中已有%s人,最多只可申请%s人" % (private_customer_count, models.Customer.MAX_PRIVATE_COUNT - private_customer_count)) flag = False with transaction.atomic(): origin_queryset = models.Customer.objects.filter( pk__in=pk_list, status=2, consultant__isnull=True).select_for_update() if not origin_queryset: return HttpResponse("获取用户失败或当前用户已报名,请申请其他用户") if len(origin_queryset) == len(pk_list): origin_queryset.update(consultant_id=current_user_id) flag = True if not flag: return HttpResponse("手速太慢,已有选中客户被其他人申请到私户,请重新申请") action_multi_apply.text = "批量申请到我的私户" action_list = [action_multi_apply] def display_record(self, obj=None, is_header=None, *args, **kwargs): if is_header: return "跟进记录" tpl = '<a href="%s" target="_blank">查看跟进记录</a>' % ( self.reverse_record_view_url(pk=obj.pk)) return mark_safe(tpl) list_display = [ StarkHandler.display_checkbox, 'parent_name', 'wechat', get_choice_text('来源', 'source'), get_m2m_text('咨询课程', 'course'), 'remark', get_datetime_text('咨询日期', 'date'), display_record ] def get_queryset(self, request, *args, **kwargs): """加条件来显示的数据(filter)""" return self.model_class.objects.filter(consultant__isnull=True) def extra_urls(self): patterns = [ url(r'^consultant/record/(?P<pk>\d+)/$', self.wrapper(self.record_view), name=self.get_record_view_url_name) ] return patterns def reverse_record_view_url(self, *args, **kwargs): return self.reverse_commons_url(self.get_record_view_url_name, *args, **kwargs) @property def get_record_view_url_name(self): return self.get_url_name('consultant_record') def record_view(self, request, pk): msg = models.ConsultRecord.objects.filter(customer_id=pk) return render(request, 'consult_record.html', {'body_list': msg})