Ejemplo n.º 1
0
class StudentHandler(PermissionHandler, ResetPasswordHandler, StarkHandler):
    search_group = [
        Option(field='education'),
        Option(field='course'),
    ]
    search_list = ['stu_name__contains', 'teacher__nickname__contains']
    list_display = ['stu_name',
                    get_choice_text('性别', 'stu_gender'),
                    'school',
                    get_choice_text('年级', 'education'),
                    get_m2m_text('报名科目', 'course'),
                    get_m2m_text('任课老师', 'teacher'), ResetPasswordHandler.display_reset_pwd
                    ]

    def get_model_form_class(self, is_add, request, *args, **kwargs):
        if is_add:
            return StudentAddModelForm

        return StudentUpdateModelForm

    def save(self, request, form, is_update, *args, **kwargs):
        # 给学生分配教师的角色
        if not is_update:
            form.save()
            role_obj = Role.objects.filter(title='学生').first()
            student_obj = form.instance
            student_obj.roles.add(role_obj)
            student_obj.save()
        form.save()
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')
	]
Ejemplo n.º 3
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'),
    ]
Ejemplo n.º 4
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')]
Ejemplo n.º 5
0
class TeacherHandler(PermissionHandler,ResetPasswordHandler, StarkHandler):
    list_display = ['nickname',
                    get_choice_text('性别', 'gender'),
                    'phone', 'wechat',
                    get_m2m_text('教授科目', 'course'), 'free_time', ResetPasswordHandler.display_reset_pwd]
    search_list = ['nickname__contains', 'free_time__contains']
    search_group = [
        Option(field='gender'),
        Option(field='course'),
    ]

    def get_model_form_class(self, is_add, request, *args, **kwargs):
        if is_add:
            return TeacherAddModelForm

        return TeacherUpdateModelForm

    def save(self, request, form, is_update, *args, **kwargs):
        # 给老师分配教师的角色
        if not is_update:
            form.save()
            role_obj = Role.objects.filter(title='教师').first()
            teacher_obj = form.instance
            teacher_obj.roles.add(role_obj)
        form.save()
Ejemplo n.º 6
0
class StudentHandler(StarkHandler):
    """
    学员相关视图函数处理类
    """

    # 页面显示积分记录
    def display_score_record(self, obj=None, is_header=None, *args, **kwargs):
        """
        页面显示积分记录
        :param obj:
        :param is_header:
        :parma args:
        :param kwargs:
        :return:
        """
        if is_header:
            return '积分管理'
        score_url = reverse('stark:web-scorerecord-list',
                            kwargs={'student_id': obj.pk})
        return mark_safe('<a target="_blank" href="%s">%s</a>' %
                         (score_url, obj.score))

    def get_add_btn(self, request, *args, **kwargs):
        return None

    def get_display_list(self):
        value = []
        if self.display_list:
            value.extend(self.display_list)
            value.append(type(self).display_edit)
        return value

    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

    display_list = [
        'customer', 'qq', 'mobile', 'emergency_contract',
        get_m2m_text('已报班级', 'class_list'), display_score_record,
        get_choice_text('状态', 'student_status')
    ]
    model_form_class = StudentModelForm
    search_list = ['customer__name', 'qq', 'mobile']
    search_group = [
        Option('class_list',
               text_func=lambda x: '%s-%s' % (x.school.title, str(x)))
    ]
Ejemplo n.º 7
0
class StudentHandler(PermissionHandler, StarkHandler):
    model_form_class = StudentModelForm

    def display_score(self, obj=None, is_header=None, *args, **kwargs):
        """新加一列"""
        if is_header:
            return '积分管理'
        # 反向取url
        record_url = reverse('stark:web_scorerecord_list',
                             kwargs={'student_id': obj.pk})

        return mark_safe('<a target="_blank" href="%s">%s</a>' %
                         (record_url, obj.score))

    list_display = [
        'customer', 'qq', 'mobile', 'emergency_contract',
        get_m2m_text('已报名班级', 'class_list'), display_score,
        get_choice_text('状态', 'student_status')
    ]  # 自定义显示

    def get_add_btn(self, request, *args, **kwargs):
        """重构隐藏, 添加按钮"""
        return None

    def get_list_display(self, request, *args, **kwargs):
        """重构:只需要修改按钮"""
        value = []
        if self.list_display:
            value.extend(self.list_display)
            value.append(type(self).display_edit)
        return value

    def get_urls(self):
        """重构url ,值需要列表功能"""
        patterns = [
            url(r'^list/$',
                self.wrapper(self.changelist_view),
                name=self.get_list_url_name),
            url(r'^change/(?P<pk>\d+)/$',
                self.wrapper(self.change_view),
                name=self.get_change_url_name),
        ]

        patterns.extend(self.extra_urls())
        return patterns

    # 模糊搜索
    search_list = [
        'customer__name',
        'qq',
        'mobile',
    ]
    # 组合搜索
    search_group = [
        Option('class_list',
               text_func=lambda x: '%s-%s' %
               (x.school.title, str(x)))  # 利用text_func添加一个lambda函数处理显示字符串
    ]
class PublicCustomerHandler(StarkHandler):
	list_display = ['name','qq',get_choice_text('状态','status'),get_choice_text('性别','gender'),
	                get_m2m_text('咨询的课程','course')]

	def get_queryset(self, request, *args, **kwargs):

		return self.model_class.objects.filter(consultant__isnull=True)

	model_form_class = PublicCustomerModelForm
class PrivateCustomerHandler(StarkHandler):
    def display_record(self, obj=None, is_header=None, *args, **kwargs):
        if is_header:
            return '跟进'
        record_url = reverse('stark:web_consultrecord_list',
                             kwargs={'customer_id': obj.pk})
        return mark_safe('<a target="_blank" href="%s">跟进</a>' % record_url)

    def display_pay_record(self, obj=None, is_header=None, *args, **kwargs):
        if is_header:
            return '缴费'
        record_url = reverse('stark:web_paymentrecord_list',
                             kwargs={'customer_id': obj.pk})
        return mark_safe('<a target="_blank" href="%s">缴费</a>' % record_url)

    model_form_class = PrivateCustomerModelForm

    list_display = [
        StarkHandler.display_checkbox, 'name', 'qq',
        get_choice_text('性别', 'gender'),
        get_m2m_text('咨询的课程', 'course'),
        get_choice_text('状态', 'status'), display_record, display_pay_record
    ]

    def get_queryset(self, request, *args, **kwargs):
        current_user_id = request.session['user_info']['id']
        print(current_user_id)
        # 拿到当前用户申请到的客户
        return self.model_class.objects.filter(consultant_id=current_user_id)

    def form_database_save(self, request, form, is_update, *args, **kwargs):
        if not is_update:
            current_user_id = request.session['user_info']['id']
            form.instance.consultant_id = current_user_id
        form.save()

    def action_multi_remove(self, request, *args, **kwargs):
        """
		把私户批量移除到公户
		:param request:
		:return:
		"""
        current_user_id = request.session['user_info']['id']
        pk_list = request.POST.getlist('pk')

        self.model_class.objects.filter(
            id__in=pk_list,
            consultant_id=current_user_id).update(consultant_id=None)

    action_multi_remove.text = "批量移动到公户"

    action_list = [
        action_multi_remove,
    ]
Ejemplo n.º 10
0
class StudentHandler(PermissionHandler, StarkHandler):
    model_form_class = StudentModelForm

    def display_score(self, obj=None, is_header=None, *args, **kwargs):
        if is_header:
            return '积分管理'

        record_url = reverse('stark:crm_scorerecord_list',
                             kwargs={'student_id': obj.pk})
        return mark_safe('<a target="_blank" href="%s">%s</a>' %
                         (record_url, obj.score))

    list_display = [
        'customer', 'qq', 'mobile', 'emergency_contract',
        get_m2m_text('已报班级', 'class_list'), display_score,
        get_choice_text('状态', 'student_status')
    ]

    def get_add_btn(self, request, *args, **kwargs):
        return None

    def get_list_display(self, request, *args, **kwargs):
        value = []
        if self.list_display:
            value.extend(self.list_display)
            value.append(type(self).display_edit)
        return value

    def get_urls(self):
        patterns = [
            url(r'^list/$',
                self.wrapper(self.changelist_view),
                name=self.get_list_url_name),
            # url(r'^add/$', self.wrapper(self.add_view), name=self.get_add_url_name),
            url(r'^change/(?P<pk>\d+)/$',
                self.wrapper(self.change_view),
                name=self.get_change_url_name),
            # url(r'^delete/(?P<pk>\d+)/$', self.wrapper(self.delete_view), name=self.get_delete_url_name),
        ]

        patterns.extend(self.extra_urls())
        return patterns

    search_list = [
        'customer__name',
        'qq',
        'mobile',
    ]

    search_group = [
        Option('class_list',
               text_func=lambda x: '%s-%s' % (x.school.title, str(x)))
    ]
Ejemplo n.º 11
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')]
Ejemplo n.º 12
0
class PrivateCustomerHandler(PermissionHandler, StarkHandler):
    # 私户
    def display_pay(self, obj=None, is_header=None, *args, **kwargs):

        if is_header:
            return "缴费记录"
        tpl = mark_safe('<a href="%s" target="_blank">查看缴费记录</a>' % reverse(
            'stark:web_paymentrecord_list', kwargs={'customer_id': obj.pk}))
        return tpl

    def display_record(self, obj=None, is_header=None, *args, **kwargs):
        if is_header:
            return "跟进记录"

        tpl = mark_safe('<a href="%s" target="_blank">查看跟进记录</a>' % reverse(
            'stark:web_consultrecord_list', kwargs={'cusotomer_id': obj.pk}))
        return tpl

    def action_multi_to_pub(self, request, *args, **kwargs):
        """
        批量删除(如果想要定制执行成功后的返回值,那么就为action函数设置返回值即可。)
        :return:
        """
        current_user_id = request.session['user_info']['id']
        pk_list = request.POST.getlist('pk')
        self.model_class.objects.filter(
            id__in=pk_list,
            consultant_id=current_user_id).update(consultant_id='')

    action_list = [action_multi_to_pub]
    action_multi_to_pub.text = "批量移除到公户"
    model_form_class = PrivateCustomerModelForm
    list_display = [
        StarkHandler.display_checkbox, 'parent_name', 'wechat',
        get_m2m_text('咨询的课程', 'course'),
        get_choice_text('状态', 'status'), display_pay, display_record
    ]

    def get_queryset(self, request, *args, **kwargs):
        current_user_id = request.session['user_info']['id']
        return self.model_class.objects.filter(consultant_id=current_user_id)

    def save(self, request, form, is_update, *args, **kwargs):
        if not is_update:
            form.instance.consultant_id = request.session['user_info']['id']
            form.save()
        form.save()
Ejemplo n.º 13
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'),
    ]
Ejemplo n.º 14
0
class PrivateCustomerHandler(PermissionHandler, StarkHandler):
    def display_record(self, obj=None, is_header=None, *args, **kwargs):
        if is_header:
            return '跟进记录'

        # 直接用 reverse,不用加原搜索条件保留
        record_url = reverse('stark:web_consultrecord_list', kwargs={'customer_id': obj.pk})  # 带上id 反向生成别名
        return mark_safe('<a target="_blank" href="%s">查看跟进</a>' % record_url)

    def display_pay_record(self, obj=None, is_header=None, *args, **kwargs):
        if is_header:
            return '缴费记录'

        # 直接用 reverse,不用加原搜索条件保留
        record_url = reverse('stark:web_paymentrecord_list', kwargs={'customer_id': obj.pk})  # 带上id 反向生成别名
        return mark_safe('<a target="_blank" href="%s">缴费</a>' % record_url)

    list_display = [StarkHandler.display_checkbox, 'name', 'qq',
                    get_m2m_text('咨询课程', 'course'), get_choice_text('状态', 'status'), display_record,
                    display_pay_record]  # 自定义显示

    def get_queryset(self, request, *args, **kwargs):
        current_user_id = request.session['user_info']['id']
        return self.model_class.objects.filter(consultant_id=current_user_id)  # 课程顾问为指定id的

    def save(self, request, form, is_update, *args, **kwargs):  # 重写模块中的方法
        """当在销售顾问登录的情况下,可以添加咨询客户,默认就是添加给自己"""
        # 默认添加学员是给当前id的销售顾问
        if not is_update:  # 增加  否则是 更新
            current_user_id = request.session['user_info']['id']
            form.instance.consultant_id = current_user_id
        form.save()  # 保存

    # 自定义函数,stark组件里有案例
    def action_multi_remove(self, request, *args, **kwargs):
        """批量移除到公户,自定义函数"""
        current_user_id = request.session['user_info']['id']
        pk_list = request.POST.getlist('pk')  # 选中客户id列表

        # 校验 id__in=pk_list  过滤 id 是否在 pk_list这个列表中
        self.model_class.objects.filter(id__in=pk_list, consultant_id=current_user_id).update(consultant=None)

    # 自定义函数必须引入action_list
    action_multi_remove.text = '批量剔除到公户'
    action_list = [action_multi_remove, ]
    model_form_class = PrivateCustomerModelForm
class PublicCustomerHandler(StarkHandler):
    def display_record(self, obj=None, is_header=None):
        if is_header:
            return '跟进记录'

        record_url = ParseUrl(request=self.request,
                              namespace=self.site.namespace,
                              name=self.get_url_name('record_view'),
                              pk=obj.pk)
        url = record_url.memory_url()
        return mark_safe('<a href="%s">查看跟进</a>' % url)

    list_display = [
        'name', 'qq',
        get_choice_text('状态', 'status'),
        get_choice_text('性别', 'gender'),
        get_m2m_text('咨询的课程', 'course'), display_record
    ]

    def get_queryset(self, request, *args, **kwargs):

        return self.model_class.objects.filter(consultant__isnull=True)

    model_form_class = PublicCustomerModelForm

    def extra_urls(self):
        patterns = [
            url(r'^record/(?P<pk>\d+)/$',
                self.wrapper(self.record_view),
                name=self.get_url_name('record_view'))
        ]

        return patterns

    def record_view(self, request, pk):
        """
		查看跟进记录视图
		:param request:
		:param pk:
		:return:
		"""
        record_list = models.ConsultRecord.objects.filter(customer_id=pk)

        return render(request, 'record_view.html',
                      {'record_list': record_list})
Ejemplo n.º 16
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
Ejemplo n.º 17
0
class StudentHandler(StarkHandler):
    model_form_class = StudentModelForm
    list_display = [
        'customer', 'qq', 'mobile', 'emergency_contract',
        get_m2m_text('已报班级', 'class_list'),
        get_choice_text('状态', 'student_status')
    ]

    has_add_btn = False

    def get_list_display(self):
        """
		获取页面上应该显示的列,预留的自定义扩展,例如:以后根据用户角色的不同展示不同的列
		:return:
		"""
        value = []
        if self.list_display:
            value.extend(self.list_display)
            value.append(type(self).display_edit)

        return value

    def get_urls(self):
        patterns = [
            url(r'^list/$',
                self.wrapper(self.changelist_view),
                name=self.get_list_url_name),
            # url(r'^add/$', self.wrapper(self.add_view), name=self.get_add_url_name),
            url(r'^change/(?P<pk>\d+)/$',
                self.wrapper(self.change_view),
                name=self.get_change_url_name),
            # url(r'^delete/(?P<pk>\d+)/$', self.wrapper(self.delete_view), name=self.get_delete_url_name),
        ]
        patterns.extend(self.extra_urls())
        return patterns

    search_list = ['customer__name', 'qq', 'mobile']

    search_group = [
        Option('class_list',
               text_func=lambda x: '%s-%s' % (x.school.title, str(x))),
        Option('student_status')
    ]
class PrivateCustomerHandler(StarkHandler):
    model_form_class = PrivateCustomerModelForm
    list_display = [
        StarkHandler.display_checkbox, 'name', 'qq',
        get_choice_text('性别', 'gender'),
        get_m2m_text('咨询的课程', 'course'),
        get_choice_text('状态', 'status')
    ]

    def get_queryset(self, request, *args, **kwargs):
        current_user_id = request.session['user_info']['id']
        print(current_user_id)
        # 拿到当前用户申请到的客户
        return self.model_class.objects.filter(consultant_id=current_user_id)

    def form_database_save(self, request, form, is_update, *args, **kwargs):
        if not is_update:
            current_user_id = request.session['user_info']['id']
            form.instance.consultant_id = current_user_id
        form.save()

    def action_multi_remove(self, request, *args, **kwargs):
        """
		把私户批量移除到公户
		:param request:
		:return:
		"""
        current_user_id = request.session['user_info']['id']
        pk_list = request.POST.getlist('pk')

        self.model_class.objects.filter(
            id__in=pk_list,
            consultant_id=current_user_id).update(consultant_id=None)

    action_multi_remove.text = "批量移动到公户"

    action_list = [
        action_multi_remove,
    ]
Ejemplo n.º 19
0
class PriCustomerHandler(PermissionHandler, StarkHandler):

    def contact(self, obj, is_header):
        if is_header:
            return '跟进'
        contact_url = name2url(self.site.namespace, "academy_consultrecord_list", customer_id=obj.pk)
        return mark_safe("<a target='_blank' href='%s'>跟进</a>" % contact_url)

    def pay_record(self, obj=None, is_header=None, *args, **kwargs):
        if is_header:
            return '缴费'
        record_url = name2url(self.site.namespace,'academy_paymentrecord_list', customer_id=obj.pk)
        return mark_safe('<a target="_blank" href="%s">缴费</a>' % record_url)

    def multi_remove_to_pub(self, request, *args, **kwargs):
        consult_id = request.session['user_info']['id']
        customer_id_list = request.POST.getlist('pk')
        Customer.objects.filter(id__in=customer_id_list, consultant_id=consult_id).update(consultant_id=None)

    multi_remove_to_pub.text = "移除到公户"
    list_display = [StarkHandler.display_checkbox, 'name',get_choice_text('性别', 'gender'), 'qq', get_m2m_text('咨询课程', 'course'),
                    get_choice_text('状态', 'status'), contact, pay_record]

    def get_queryset(self, request, *args, **kwargs):
        consult_id = request.session['user_info']['id']
        return Customer.objects.filter(consultant_id=consult_id)

    action_list = [multi_remove_to_pub]
Ejemplo n.º 20
0
class PrivateCustomerHandler(StarkHandler):
    """
    私人用户相关视图函数处理类
    """

    # 页面显示跟进记录
    def display_record(self, obj=None, is_header=None, *args, **kwargs):
        """
        页面显示跟进记录
        :param obj:
        :param is_header:
        :param args:
        :param kwargs:
        :return:
        """
        if is_header:
            return '跟进记录'
        record_url = reverse('stark:web-consultrecord-list',
                             kwargs={'customer_id': obj.pk})
        return mark_safe('<a target="_blank" href="%s">查看跟进记录</a>' % \
                         record_url)

    # 页面显示缴费记录
    def display_pay_record(self, obj=None, is_header=None, *args, **kwargs):
        """
        页面显示缴费记录
        :param obj:
        :param is_header:
        :param args:
        :param kwargs:
        :return:
        """
        if is_header:
            return '缴费记录'
        record_url = reverse('stark:web-paymentrecord-list',
                             kwargs={'customer_id': obj.pk})
        return mark_safe('<a target="_blank" href="%s">查看缴费记录</a>' % \
                         record_url)

    def get_queryset(self, request, *args, **kwargs):
        current_user_id = request.session['user_info']['id']
        return self.model_class.objects.filter(consultant_id=current_user_id)

    def save(self, request, form, is_update, *args, **kwargs):
        if not is_update:
            current_user_id = request.session['user_info']['id']
            form.instance.consultant_id = current_user_id
        form.save()

    # 批量移除到公户
    def action_multi_remove(self, request, *args, **kwargs):
        """
        批量移除到公户
        :param request:
        :param args:
        :param kwargs:
        :return:
        """
        current_user_id = request.session['user_info']['id']
        pk_list = request.POST.getlist('pk')
        Customer.objects.filter(
            id__in=pk_list,
            consultant_id=current_user_id).update(consultant=None)

    action_multi_remove.text = '移除到公户'

    display_list = [
        StarkHandler.display_checkbox,
        'name',
        'qq',
        get_m2m_text('咨询课程', 'course'),
        get_choice_text('状态', 'status'),
        display_record,
        display_pay_record,
    ]
    model_form_class = PrivateCustomerModelForm
    action_list = [
        action_multi_remove,
    ]
class PublicCustomerHandler(StarkHandler):

	def display_record(self,obj=None,is_header=None):
		if is_header:
			return '跟进记录'

		record_url = ParseUrl(request=self.request, namespace=self.site.namespace, name=self.get_url_name('record_view'),
		                     pk=obj.pk)
		url = record_url.memory_url()
		return mark_safe('<a href="%s">查看跟进</a>'%url)



	list_display = [StarkHandler.display_checkbox,'name','qq',get_choice_text('状态','status'),get_choice_text('性别','gender'),
	                get_m2m_text('咨询的课程','course'),display_record]


	def get_queryset(self, request, *args, **kwargs):

		return self.model_class.objects.filter(consultant__isnull=True)

	model_form_class = PublicCustomerModelForm

	def extra_urls(self):
		patterns = [
			url(r'^record/(?P<pk>\d+)/$', self.wrapper(self.record_view),
			    name=self.get_url_name('record_view'))
		]

		return patterns

	def record_view(self,request,pk):
		"""
		查看跟进记录视图
		:param request:
		:param pk:
		:return:
		"""
		record_list = models.ConsultRecord.objects.filter(customer_id=pk)

		return render(request,'record_view.html',{'record_list':record_list})
	def action_multi_apply(self, request, *args, **kwargs):
		"""
		批量申请到私户
		:param request:
		:return:
		"""
		"""
		# 基本实现--
		current_user_id = 6

		# 客户ID 列表
		pk_list = request.POST.getlist('pk')

		# 将选中的客户更新到我的私户(consultant=当前用户)
		models.Customer.objects.filter(id__in=pk_list,status=2,consultant__isnull=True).update(consultant_id=current_user_id)
		"""
		current_user_id = 6
		pk_list = request.POST.getlist('pk')
		private_customer_count = models.Customer.objects.filter(consultant_id=current_user_id,status=2).count()
		# 私户个数的限制
		if private_customer_count + len(pk_list) > 150:
			return HttpResponse('做人不要太贪心,私户中已有%s个客户,最多只能申请 %s'%(private_customer_count,150 - private_customer_count))

		# 数据库中加锁

		flag = False
		with transaction.atomic(): # 事务
			# 在数据库中加锁
			# 防止多个用户同时提交一个相同的客户到自己的私户
			origin_queryser = models.Customer.objects.filter(id__in=pk_list,status=2,consultant__isnull=True).select_for_update()
			if len(origin_queryser) == len(pk_list):
				models.Customer.objects.filter(id__in=pk_list, status=2, consultant__isnull=True).update(consultant_id=current_user_id)
				flag = True
		if not flag:
			return HttpResponse('手速太慢了,选中的客户已被其他人申请走')



	action_multi_apply.text = "申请到私户"

	action_list = [action_multi_apply,]
Ejemplo n.º 22
0
class StudentHandler(PermissionHandler, StarkHandler):

    model_form_class = StudentModelForm

    @property
    def current_user(self):
        user_id = self.request.session['user_info']['id']
        user_obj = UserInfo.objects.filter(id=user_id).first()
        return user_obj

    @property
    def get_myclasses_url_name(self):
        return self.get_url_name('myclasses')

    @property
    def get_myhomeworkscore_url_name(self):
        return self.get_url_name('homeworkscore')

    def display_score(self, obj=None, is_header=None, *args, **kwargs):
        if is_header:
            return '积分管理'
        if self.current_user.depart_id == 4:
            return f'{obj.score}'
        record_url = name2url(self.site.namespace, "academy_scorerecord_list", student_id=obj.pk)
        return mark_safe('<a target="_blank" href="%s">%s</a>' % (record_url, obj.score))

    def get_myclasses_view(self, request, *args, **kwargs):
        student_id = kwargs.get('student_id')
        classes = Student.objects.filter(id=student_id).first().classes.all()
        return render(request, 'myclasses.html', {'classes': classes, 'student_id': student_id})

    def get_homeworkscore_view(self, request, *args, **kwargs):
        student_id = kwargs.get('student_id')
        classes_id = kwargs.get('classes_id')
        homeworkscore_queryset = HomeworkScore.objects.filter(classes_id=classes_id, student_id=student_id).all()
        return render(request, 'check_homeworkscore.html', {'score_queryset': homeworkscore_queryset})

    def display_myclasses(self, obj, is_header, *args, **kwargs):
        if is_header:
            return '我的课程'
        myclasses_url = name2url(self.site.namespace, self.get_myclasses_url_name, student_id=obj.pk)
        return mark_safe('<a href="%s">我的课程</a>' % (myclasses_url))

    list_display = ['customer', 'qq', 'mobile', 'emergency_contract', get_m2m_text('已报班级', 'classes'),
                    display_score, get_choice_text('状态', 'student_status'),]
    has_add_btn = False

    def get_urls(self):
        patterns = [
            url(r'^list/$', self.wrapper(self.changelist_view), name=self.get_list_url_name),
            url(r'^change/(?P<pk>\d+)/$', self.wrapper(self.change_view), name=self.get_change_url_name),
            url(r'^myclasses/(?P<student_id>\d+)/$', self.wrapper(self.get_myclasses_view), name=self.get_myclasses_url_name),
            url(r'^myclasses/homeworkscore/(?P<student_id>\d+)/(?P<classes_id>\d+)/$', self.wrapper(self.get_homeworkscore_view), name=self.get_myhomeworkscore_url_name)
        ]
        return patterns

    search_list = ['customer__name', 'qq', 'mobile', ]

    search_group = [
        Option('classes', text_func=lambda x: '%s-%s' % (x.school.title, str(x)))
    ]

    def get_queryset(self, request, *args, **kwargs):
        if self.current_user.depart_id == 4:
            student_id = Student.objects.filter(user_id=self.current_user.id)
            return Student.objects.filter(id=student_id)
        return super().get_queryset(request, *args, **kwargs)

    def get_search_group(self):
        if self.current_user.depart_id == 4:
            return []
        return self.search_group

    def get_search_list(self):
        if self.current_user.depart_id == 4:
            return []
        return self.search_list

    def get_list_display(self, request, *args, **kwargs):
        if self.current_user.depart_id == 4:
            self.list_display[4]=type(self).display_myclasses
        return self.list_display
Ejemplo n.º 23
0
class PubCustomerHandler(PermissionHandler, StarkHandler):
    def check_record(self, obj, is_header):
        if is_header:
            return '跟进记录'
        record_url = name2url(self.site.namespace,
                              self.get_url_name('record'),
                              pk=obj.pk)
        return mark_safe("<a href='%s'>跟进记录</a>" % record_url)

    list_display = [
        StarkHandler.display_checkbox, 'name',
        get_choice_text('性别', 'gender'), 'qq',
        get_m2m_text('课程', 'course'),
        get_choice_text('状态', 'status'), check_record
    ]

    def get_queryset(self, request, *args, **kwargs):
        return self.model_class.objects.filter(consultant__isnull=True)

    def multi_add_to_priv(self, request, *args, **kwargs):
        consult_id = request.session['user_info']['id']
        pk_list = request.POST.getlist('pk')

        private_customer_count = Customer.objects.filter(
            consultant_id=consult_id, status=2).count()

        # 私户个数限制
        if (private_customer_count +
                len(pk_list)) > Customer.MAX_PRIVATE_CUSTOMER_COUNT:
            return HttpResponse(
                '做人不要太贪心,私户中已有%s个客户,最多只能申请%s' %
                (private_customer_count,
                 Customer.MAX_PRIVATE_CUSTOMER_COUNT - private_customer_count))
        flag = False
        with transaction.atomic():  # 事务
            # 在数据库中加锁
            origin_queryset = Customer.objects.filter(
                id__in=pk_list, status=2,
                consultant__isnull=True).select_for_update()
            if len(origin_queryset) == len(pk_list):
                Customer.objects.filter(
                    id__in=pk_list, status=2,
                    consultant__isnull=True).update(consultant_id=consult_id)
                flag = True
        if not flag:
            return HttpResponse('手速太慢了,选中的客户已被其他人申请,请重新选择')

    multi_add_to_priv.text = '批量加入私户'

    def get_record(self, request, pk):
        record_list = ConsultRecord.objects.filter(customer_id=pk)
        return render(request, 'record.html', {'record_list': record_list})

    def extra_urls(self):
        patterns = [
            url(r'^record/(?P<pk>\w+)',
                self.wrapper(self.get_record),
                name=self.get_url_name('record'))
        ]
        return patterns

    model_form_class = PublicCustomerModelForm
    action_list = [multi_add_to_priv]
Ejemplo n.º 24
0
class PublicCustomerHandler(PermissionHandler, StarkHandler):
    # 增加一个 查看记录按钮
    def display_record(self, obj=None, is_header=None, *args, **kwargs):
        if is_header:
            return '跟进记录'
        record_url = self.reverse_commons_url(self.get_url_name('record_view'),
                                              pk=obj.pk)  # 带上id 反向生成别名
        return mark_safe('<a href="%s">查看跟进</a>' % record_url)

    list_display = [
        StarkHandler.display_checkbox, 'name', 'qq', display_record,
        get_choice_text('状态', 'status'),
        get_m2m_text('咨询课程', 'course')
    ]  # 自定义显示

    # 自定义筛选:过滤只显示未被分配的客户
    def get_queryset(self, request, *args, **kwargs):
        return self.model_class.objects.filter(consultant__isnull=True)

    model_form_class = PublicCustomerModelForm  # 应用上

    # 增加一个url(跟进记录)用写好的钩子方法
    def extra_urls(self):
        patterns = [
            url(r'^record/(?P<pk>\d+)$',
                self.wrapper(self.record_view),
                name=self.get_url_name('record_view'))
        ]
        return patterns

    def record_view(self, request, pk):
        """
        跟进记录视图
        :param request:
        :param pk:
        :return:
        """
        record_list = models.ConsultRecord.objects.filter(customer=pk)
        return render(request, 'record_view.html',
                      {'record_list': record_list})

    # 自定义函数,stark组件里有案例
    def action_multi_apply(self, request, *args, **kwargs):
        """批量申请到私户,自定义函数"""
        pk_list = request.POST.getlist('pk')  # 选中客户id列表
        current_user_id = request.session['user_info']['id']
        # 将选中的客户更新到我的私户中()当前登录用户的私户当前登录id中
        # 状态验证未成交 且 没有课程顾问的
        private_customer_count = models.Customer.objects.filter(
            consultant_id=current_user_id, status=2).count()  # 取当前用户的私户个数
        if (private_customer_count + len(pk_list)) > 150:
            return HttpResponse(
                '私户中总个数已经有%s 人,还能申请%s 个' %
                (private_customer_count, models.Customer.MAX_PRIVATE_CUSTOMER -
                 private_customer_count))

        # 如果多个人同时提交申请私户可能会有bug所以。。。【数据库加锁,许可证】
        from django.db import transaction

        flag = False
        with transaction.atomic():  # 事务
            # 上锁  select * from customer where id in [11,22] for update;
            origin_queryset = models.Customer.objects.filter(
                id__in=pk_list, status=2,
                consultant__isnull=True).select_for_update()

            if len(origin_queryset) == len(pk_list):
                models.Customer.objects.filter(
                    id__in=pk_list, status=2, consultant__isnull=True).update(
                        consultant_id=current_user_id)
                flag = True

        if not flag:
            return HttpResponse('选中的客户已经被其他人申请走了')

    action_multi_apply.text = '批量申请到私户'
    action_list = [
        action_multi_apply,
    ]
Ejemplo n.º 25
0
class PublicCustomerHandler(PermissionHandler, StarkHandler):
    def display_record(self, obj=None, is_header=None, *args, **kwargs):
        if is_header:
            return '跟进记录'
        record_url = self.reverse_commons_url(self.get_url_name('record_view'),
                                              pk=obj.pk)
        return mark_safe('<a href="%s">查看跟进</a>' % record_url)

    list_display = [
        StarkHandler.display_checkbox, 'name', 'qq',
        get_m2m_text('咨询课程', 'course'), display_record,
        get_choice_text('状态', 'status')
    ]

    model_form_class = PublicCustomerModelForm

    def get_queryset(self, request, *args, **kwargs):
        return self.model_class.objects.filter(consultant__isnull=True)

    def extra_urls(self):
        patterns = [
            url(r'^record/(?P<pk>\d+)/$',
                self.wrapper(self.record_view),
                name=self.get_url_name('record_view')),
        ]
        return patterns

    def record_view(self, request, pk):
        """
        查看跟进记录的视图
        :param request:
        :param pk:
        :return:
        """
        record_list = models.ConsultRecord.objects.filter(customer_id=pk)
        return render(request, 'record_view.html',
                      {'record_list': record_list})

    def action_multi_apply(self, request, *args, **kwargs):
        """
        批量申请到私户
        :return:
        """
        current_user_id = request.session['user_info']['id']
        pk_list = request.POST.getlist('pk')

        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_CUSTOMER_COUNT:
            return HttpResponse('做人不要太贪心,私户中已有%s个客户,最多只能申请%s' %
                                (private_customer_count,
                                 models.Customer.MAX_PRIVATE_CUSTOMER_COUNT -
                                 private_customer_count))

        # 数据库中加锁
        flag = False
        with transaction.atomic():  # 事务
            # 在数据库中加锁
            origin_queryset = models.Customer.objects.filter(
                id__in=pk_list, status=2,
                consultant__isnull=True).select_for_update()
            if len(origin_queryset) == len(pk_list):
                models.Customer.objects.filter(
                    id__in=pk_list, status=2, consultant__isnull=True).update(
                        consultant_id=current_user_id)
                flag = True

        if not flag:
            return HttpResponse('手速太慢了,选中的客户已被其他人申请,请重新选择')

    action_multi_apply.text = "申请到我的私户"

    action_list = [
        action_multi_apply,
    ]
Ejemplo n.º 26
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})