示例#1
0
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)
示例#2
0
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')
	]
示例#4
0
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()
示例#5
0
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]
示例#6
0
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')]
示例#7
0
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'),
    ]
示例#8
0
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)
示例#9
0
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()
示例#11
0
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()
示例#12
0
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})
示例#13
0
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>&nbsp;&nbsp;<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)
示例#15
0
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')]
示例#16
0
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]
示例#17
0
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')
	]
示例#19
0
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})