Ejemplo n.º 1
0
class UserInfoHandler(StarkHandler):
    # per_page_num = 3
    # 定制页面的列
    list_display = [
        'name',
        get_choice_text('性别', 'gender'),
        get_choice_text('班级', 'classes'),
        # 'gender','classes',
        'age',
        'email',
        'depart',
        StarkHandler.display_edit,
        StarkHandler.display_del
    ]
    has_add_btn = True

    # 在stark/service/v1 下面定义了一个model_form_class的None,就是为了可以自定义自己的ModelForm
    model_form_class = UserInfoModelForm

    # order_list = ['name']

    # 姓名中含有关键字或邮箱中含有关键字 如果没有 __contains 就算精确查找
    search_list = ['name__contains', 'email__contains']

    # 当页面减少了部门字段以后,数据库保存不了,因此,就要使用form_database_save的这个钩子函数,去自定义部门字段的值
    def form_database_save(self, form, is_update=False):
        form.instance.depart_id = 1
        form.save()
Ejemplo n.º 2
0
class UserInfoHandler(StarkHandler):
    """
    用户相关视图函数处理类
    """
    # 自定义页面显示列
    display_list = [
        StarkHandler.display_checkbox,
        'name',
        get_choice_text('性别', 'gender'),
        get_choice_text('班级', 'classes'),
        'age', 'email', 'depart',
        StarkHandler.display_edit,
        StarkHandler.display_del,
    ]
    # 自定义每页显示条目数量
    per_page_count = 10
    # 自定义页面是否显示添加按钮
    has_add_btn = True
    # 自定义页面表单模型
    # model_form_class = UserInfoModelForm
    # 自定义排序关键字列表
    order_list = ['id']
    # 自定义搜索关键词列表
    search_list = ['name__contains', 'email__contains']
    # 自定义页面可批量操作功能列表
    action_list = [StarkHandler.action_multi_delete,]
    # 自定义页面组合搜索可选项组合
    search_group = [
        Option('gender', is_multi=True),
        # MyOption('depart', {'id__gt': 2}),
        Option('depart', db_condition={'id__gt': 0}),
        # Option('gender', text_func=lambda field_obj: field_obj[1] + '666'),
    ]
Ejemplo n.º 3
0
class TeaStudentHandler(PermissionHandler, StarkHandler):
    # 老师 查看自己的学生
    search_list = ['stu_name__contains']

    def display_course_record(self, obj=None, is_header=None, *args, **kwargs):
        if is_header:
            return "课堂反馈"
        return mark_safe(
            '<a href="%s" target="_blank">查看课堂反馈</a>' % reverse('stark:web_courserecord_list',
                                                                kwargs={'student_id': obj.pk}))

    list_display = ['stu_name', get_choice_text('性别', 'stu_gender'), 'school', get_choice_text('年级', 'education'),
                    display_course_record]
    has_add_btn = False

    def get_list_display(self, request, *args, **kwargs):
        return self.list_display

    def get_urls(self):
        patterns = [
            re_path(r'^list/$', self.wrapper(self.changelist_view), name=self.get_list_url_name),
        ]
        return patterns

    def get_queryset(self, request, *args, **kwargs):
        current_user_id = request.session['user_id']
        teach_obj = models.Teacher.objects.filter(id=current_user_id).first()

        return self.model_class.objects.filter(teacher=teach_obj, teacher__isnull=False)
Ejemplo n.º 4
0
class UserInfoHandler(StarkHandler):

    # def display_gender(self, obj=None, is_header=None):
    #     if is_header:
    #         return "性别"
    #     return obj.get_gender_display
    #
    # def display_classes(self, obj=None, is_header=None):
    #     if is_header:
    #         return "班级"
    #
    #     return obj.get_classes_display

    # 定制页面显示的列,我这里定义几个,则页面显示几个列
    list_display = [StarkHandler.display_checkbox,
                    'name', 'age', 'email',
                    get_choice_text('性别', 'gender'),
                    get_choice_text('班级', 'classes'),
                    StarkHandler.display_edit,
                    StarkHandler.display_del]

    # def get_list_display(self):
    #     return ['name', 'age', 'email', 'depart']

    has_add_btn = True

    order_list = ['id']
    search_list = ['name__contains']
    action_list = [StarkHandler.action_multi_delete, ]
    search_group = [
        Option('gender', is_multi=True),
        Option('depart', db_condition={'id__gt': 0}),
    ]
Ejemplo n.º 5
0
class UserInfoHandler(StarkHandler):

    # 定制页面显示的列
    list_display = [
        StarkHandler.display_checkbox, 'id', 'name',
        get_choice_text('性别', 'gender'),
        get_choice_text('班级', 'classes'), 'age', 'email', 'depart',
        StarkHandler.display_edit, StarkHandler.display_del
    ]

    per_page_count = 10  # 每页显示数据个数
    has_add_btn = True  # 是否显示添加按钮

    order_list = ['id']  # 数据排序方式

    # 姓名中或邮箱中含有关键字 不加__contains就是精确查找
    search_list = ['name__contains', 'email__contains']

    action_list = [StarkHandler.action_multi_delete]  # 批量删除

    # model_form_class = UserInfoModelForm      #   自定制 添加/编辑 页面显示的字段
    # def save(self, form, is_update=False):
    #     form.instance.depart_id = 1
    #     form.save()

    search_group = [
        Option('gender', is_multi=True),
        MyOption('depart', db_condition={'id__gt':
                                         2}),  # db_condition:ORM的筛选条件

        # Option('gender', text_func=lambda field_object: '666' )
    ]
Ejemplo n.º 6
0
class PaymentRecordHandler(StarkHandler):
    list_display = [get_choice_text('缴费类型', 'pay_type'), 'paid_fee', 'class_list', 'consultant',
                    get_choice_text('状态', 'confirm_status')]

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

    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),
        ]
        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 get_model_form_class(self, is_add, request, pk, *args, **kwargs):
        # 如果当前客户有学生信息,则使用PaymentRecordModelForm;否则StudentPaymentRecordModelForm
        customer_id = kwargs.get('customer_id')
        student_exists = models.Student.objects.filter(customer_id=customer_id).exists()
        if student_exists:
            return PaymentRecordModelForm
        return StudentPaymentRecordModelForm

    def 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('非法操作')

        form.instance.customer_id = customer_id
        form.instance.consultant_id = current_user_id
        # 创建缴费记录信息
        form.save()

        # 创建学员信息
        class_list = form.cleaned_data['class_list']
        fetch_student_object = models.Student.objects.filter(customer_id=customer_id).first()
        if not fetch_student_object:
            qq = form.cleaned_data['qq']
            mobile = form.cleaned_data['mobile']
            emergency_contract = form.cleaned_data['emergency_contract']
            student_object = models.Student.objects.create(customer_id=customer_id, qq=qq, mobile=mobile,
                                                           emergency_contract=emergency_contract)
            student_object.class_list.add(class_list.id)
        else:
            fetch_student_object.class_list.add(class_list.id)
Ejemplo n.º 7
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()
Ejemplo n.º 8
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.º 9
0
class UserInfoHandler(StarkHandler):
    # 定制页面显示的列
    list_display = [
        StarkHandler.display_checkbox, 'name',
        get_choice_text('性别', 'gender'),
        get_choice_text('班级', 'classes'), 'age', 'email', 'depart',
        StarkHandler.display_edit, StarkHandler.display_del
    ]

    per_page_count = 10
    has_add_btn = True
    # model_form_class = UserInfoModelForm

    order_list = ['id']

    search_list = ['name__contains', 'email__contains']

    action_list = [
        StarkHandler.action_multi_delete,
    ]

    # def save(self, form, is_update=False):
    #     form.instance.depart_id = 1
    #     form.save()

    search_group = [
        Option('gender', is_multi=True),
        Option('depart', db_condition={'id__gt': 0})
        # MyOption('depart', {'id__gt': 2}),
        # Option('gender', text_func=lambda field_object: field_object[1] + '666'),
    ]
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
Ejemplo n.º 11
0
class PaymentHandler(PermissionHandler, StarkHandler):
    list_display = [get_choice_text('缴费类型', 'pay_type'), 'paid_fee', 'classes', 'consultant',
                    get_choice_text('状态', 'confirm_status')]

    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),
        ]
        patterns.extend(self.extra_urls())
        return patterns

    def get_queryset(self, request, *args, **kwargs):
        customer_id = kwargs.get('customer_id')
        consult_id = request.session['user_info']['id']
        return self.model_class.objects.filter(customer_id=customer_id, customer__consultant_id=consult_id)

    def get_model_form_class(self, is_add, request, *args, **kwargs):
        # 如果当前客户有学生信息,则使用PaymentRecordModelForm;否则StudentPaymentRecordModelForm
        customer_id = kwargs.get('customer_id')
        student_exists = Student.objects.filter(customer_id=customer_id).exists()
        if student_exists:
            return PaymentRecordModelForm
        return StudentPaymentRecordModelForm

    def save(self, form, is_update, request, *args, **kwargs):
        customer_id = kwargs.get('customer_id')
        consult_id = request.session['user_info']['id']
        object_exists = Customer.objects.filter(id=customer_id,
                                                       consultant_id=consult_id).exists()
        if not object_exists:
            return HttpResponse('非法操作')

        form.instance.customer_id = customer_id
        form.instance.consultant_id = consult_id
        # 创建缴费记录信息
        form.save()

        # 创建学员信息
        classes = form.cleaned_data['classes']
        fetch_student_object = Student.objects.filter(customer_id=customer_id).first()
        if not fetch_student_object:
            #先创建用户信息
            new_user_obj = Customer.objects.filter(id=customer_id).first()
            name, gender, phone = new_user_obj.name, new_user_obj.gender, request.POST.get('mobile')
            default_student_pwd = to_md('123')
            user_obj = UserInfo(name=name, password=default_student_pwd, gender=gender, phone=phone, depart_id=4)
            user_obj.save()
            user_obj.roles.add(12)  #具体指数据库中角色id,一般不会改变
            qq = form.cleaned_data['qq']
            mobile = form.cleaned_data['mobile']
            emergency_contract = form.cleaned_data['emergency_contract']
            student_object = Student.objects.create(user_id=user_obj.id, customer_id=customer_id, qq=qq, mobile=mobile,
                                                           emergency_contract=emergency_contract)
            student_object.classes.add(classes.id)
        else:
            fetch_student_object.classes.add(classes.id)
Ejemplo n.º 12
0
class UserInfoHandler(StarkHandler):
    # per_page_num = 1
    # 定制页面的列
    list_display = [
        'name',
        get_choice_text('性别', 'gender'),
        get_choice_text('班级', 'classes'), 'age', 'email', 'depart',
        StarkHandler.display_edit, StarkHandler.display_del
    ]
Ejemplo n.º 13
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]
Ejemplo n.º 14
0
class PaymentApprovalHandler(PermissionHandle, StarkHandler):
    def multi_change(self, request):
        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.student_status = 2
            payment_obj.customer.student.save()

    multi_change.text = '批量确认'

    def multi_reject(self, request):
        pk_list = request.POST.getlist('pk')
        self.model_class.objects.filter(
            id__in=pk_list, confirm_status=1).update(confirm_status=3)

    multi_reject.text = '批量驳回'

    def get_urls(self):
        patterns = [
            url(r'^list/$',
                self.wrapper(self.list),
                name=self.get_list_url_name),
        ]
        patterns.extend(self.extra_urls())
        return patterns

    def get_label_name(self, request, *args, **kwargs):
        '''
        为以后的扩展预留,根据不同的情况显示不同的内容(列)
        :return:
        '''
        value = []
        if self.label_name:
            value.extend(self.label_name)
        return value

    action_list = [multi_change, multi_reject]
    has_add_btn = False
    order_list = ['confirm_status']
    label_name = [
        StarkHandler.display_checkbox, 'customer',
        get_choice_text('费用类型', 'pay_type'), 'paid_fee', 'class_list',
        get_date_text('申请日期', 'apply_date'),
        get_choice_text('确认状态', 'confirm_status'), 'consultant'
    ]
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.º 16
0
class CheckPaymentRecordHandler(PermissionHandler, StarkHandler):
    search_group = [Option('confirm_status'), Option('consultant')]
    order_list = ['confirm_status']
    list_display = [
        StarkHandler.display_checkbox, 'consultant', 'customer', 'paid_fee',
        get_choice_text('类型', 'pay_type'),
        get_choice_text('状态', 'confirm_status'), 'apply_date'
    ]

    def get_list_display(self, request, *args, **kwargs):
        return self.list_display

    has_add_btn = False

    def get_urls(self):
        patterns = [
            re_path(r'^list/$',
                    self.wrapper(self.changelist_view),
                    name=self.get_list_url_name),
        ]
        return patterns

    def action_multi_check(self, request, *args, **kwargs):
        pk_list = request.POST.getlist('pk')
        for pk in pk_list:
            payrecord_obj = self.model_class.objects.filter(
                id=pk, confirm_status=1).first()
            if not payrecord_obj:
                continue
            payrecord_obj.confirm_status = 2
            payrecord_obj.customer.status = 1
            payrecord_obj.save()
            payrecord_obj.customer.save()

    action_multi_check.text = "批量通过审核"

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

        pk_list = request.POST.getlist('pk')
        for pk in pk_list:
            payrecord_obj = self.model_class.objects.filter(
                id=pk, confirm_status=1).first()
            if not payrecord_obj:
                continue
            payrecord_obj.confirm_status = 3
            payrecord_obj.save()

    action_multi_cancle.text = "批量驳回"

    action_list = [action_multi_check, action_multi_cancle]
Ejemplo n.º 17
0
class UserInfoHandler(StarkHandler):
    def display_reset_pwd(self, obj=None, is_header=None, *args, **kwargs):
        if is_header:
            return "重置密码"

        reset_url = self.reverse_commons_url(self.get_url_name('reset_pwd'),
                                             pk=obj.pk)
        return mark_safe(
            '<a class="btn btn-small btn-info" href="%s">重置密码</a>' % reset_url)

    list_display = [
        'name', 'nickname', 'email', 'depart',
        get_choice_text('状态', 'status'), display_reset_pwd
    ]

    def get_model_form_class(self, is_add, request, pk, *args, **kwargs):
        """
		定制添加和编辑页面
		:param is_add:
		:param request:
		:param pk:
		:param args:
		:param kwargs:
		:return:
		"""
        if is_add:
            return UserInfoAddModelForm
        return UserInfoChangeModelForm

    def reset_password(self, request, pk):
        """
		重置密码
		:param request:
		:param pk: 重置密码的 用户ID
		:return:
		"""

        userinfo_object = models.UserInfo.objects.filter(id=pk).first()
        if not userinfo_object:
            return HttpResponse("用户不存在,无法进行重置!")
        if request.method == "GET":
            form = ResetPasswordForm()
            return render(request, 'stark/change.html', {'form': form})
        form = ResetPasswordForm(data=request.POST)
        if form.is_valid():
            userinfo_object.password = form.cleaned_data['password']
            userinfo_object.save()
            return redirect(self.reverse_list_url())
        return render(request, 'stark/change.html', {'form': form})

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

    search_list = ['name__contains', 'nickname__contains', 'email_contains']
    search_group = [Option(field='depart')]
Ejemplo n.º 18
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.º 19
0
class ContactHandler(StarkHandler):
    list_display = [
        'id', 'name', 'company',
        get_choice_text('类别', 'position'), 'tel', 'phone', 'email',
        'wechat_name', 'meno'
    ]
    search_list = ['name__contains', 'company__contains']
Ejemplo n.º 20
0
class UserInfoHandler(StarkHandler):
	def display_reset_pwd(self, obj=None, is_header=None):
		if is_header:
			return "重置密码"
		parse_url = ParseUrl(request=self.request, namespace=self.site.namespace, name=self.get_url_name('reset_pwd'),
		                     pk=obj.pk)
		url = parse_url.memory_url()
		return mark_safe('<a href="%s">重置密码</a>' % url)

	list_display = ['nickname', 'name', get_choice_text('性别', 'gender'), 'phone', 'email', 'depart', display_reset_pwd]

	def get_model_form_class(self, is_add=False):
		"""
		定制添加和编辑页面
		:param is_add:
		:return:
		"""
		if is_add:
			return UserInfoAddModelForm
		return UserInfoChangeModelForm

	def reset_password(self, request, pk):
		"""
		重置密码的视图函数
		:param request:
		:param pk:
		:return:
		"""
		userinfo_object = models.UserInfo.objects.filter(id=pk).first()
		if not userinfo_object:
			return HttpResponse("用户不存在,无法进行重置!")
		if request.method == "GET":
			form = ResetPasswordForm()
			return render(request, 'stark/change.html', {'form': form})
		form = ResetPasswordForm(data=request.POST)
		if form.is_valid():
			userinfo_object.password = form.cleaned_data['password']
			userinfo_object.save()
			parse_url = ParseUrl(request=self.request, namespace=self.site.namespace, name=self.get_list_url_name)
			url = parse_url.memory_url()
			return redirect(url)
		return render(request, 'stark/change.html', {'form': form})

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

		return patterns

	# 模糊搜索
	search_list = ['nickname__contains', 'name__contains']

	# 组合搜索
	search_group = [
		Option(field='gender'),
		Option(field='depart', is_multi=True),
	]
Ejemplo n.º 21
0
class UserInfoHandler(PermissionHandler, StarkHandler):
    def display_reset_pwd(self,
                          obj=None,
                          is_header=None,
                          *args,
                          **kwargs):  # 自定义额外字段,然后加到list_display中即可
        if is_header:
            return '重置密码'
        reset_url = self.reverse_commons_url(self.get_url_name('rest_pwd'),
                                             pk=obj.pk)  # 带上id 反向生成别名
        return mark_safe('<a href="%s">重置密码</a>' % reset_url)

    list_display = [
        'nickname',
        get_choice_text('性别', 'gender'), 'phone', 'email', 'depart',
        display_reset_pwd
    ]
    # 加上模糊搜索
    search_list = ['nickname__contains', 'name__contains']
    # 加上组合搜索
    search_group = [
        Option(field='gender'),
        Option(field='depart'),
    ]

    def get_model_form_class(self, is_add, request, pk, *args, **kwargs):
        if is_add:
            return UserInfoAddModelForm
        return UserInfoEditModelForm

# 扩展功能==================单独一个url处理重置密码功能==================

# 自定义的视图函数,给下面调用

    def reset_password(self, request, pk):
        """重置密码的视图函数"""
        user_object = models.UserInfo.objects.filter(id=pk).first()
        if not user_object:
            return HttpResponse('用户不存在无法重置密码')
        if request.method == 'GET':
            form = ResetPasswordForm
            return render(request, 'stark/change.html', {'form': form})
        # 校验保存
        form = ResetPasswordForm(data=request.POST)
        if form.is_valid():
            # 密码更新到数据库
            user_object.password = form.cleaned_data['password']
            user_object.save()
            return redirect(self.reverse_list_url())  # 直接使用封装好的方法,会跳页面
        return render(request, 'stark/change.html', {'form': form})

    # 自定义增加url(重置密码)用写好的钩子方法
    def extra_urls(self):
        patterns = [
            url(r'^reset/password/(?P<pk>\d+)$',
                self.wrapper(self.reset_password),
                name=self.get_url_name('rest_pwd'))
        ]
        return patterns
Ejemplo n.º 22
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.º 23
0
class UserInfolHandler(PermissionHandler, StarkHandler):
    order_list = [
        'depart_id',
    ]
    search_list = ['name__contains']
    search_group = [
        Option(field='gender', is_multi=True),
        Option(field='depart'),
    ]

    def reset_user_pwd(title):
        from stark.utils.convert import name2url

        def inner(self, obj=None, is_header=None, *args, **kwargs):
            if is_header:
                return title
            return mark_safe("<a href='%s'>%s</a>" % (name2url(
                self.site.namespace, self.get_url_name('reset_pwd'),
                pk=obj.pk), title))

        return inner

    list_display = [
        'name',
        get_choice_text('性别', 'gender'),
        'phone',
        'depart',
        reset_user_pwd('重置密码'),
    ]

    def get_model_form_class(self, is_add, request, *args, **kwargs):
        if is_add:
            return UserInfoAddModelForm
        else:
            return UserInfoEditModelForm

    def reset_pwd(self, request, pk, *args, **kwargs):
        user_obj = UserInfo.objects.filter(id=pk).first()
        if not user_obj:
            return HttpResponse('user does not exist!')
        form = ResetPwdModelForm()
        if request.method == 'GET':
            return render(request, 'stark/change.html', {'form': form})
        form = ResetPwdModelForm(data=request.POST)
        if form.is_valid():
            pwd = form.cleaned_data['password']
            user_obj.password = pwd
            user_obj.save()
            # 在数据库保存成功后,跳转回列表页面(携带原来的参数)。
            return redirect(self.reverse_list_url())
        return render(request, 'stark/change.html', {'form': form})

    def extra_urls(self):
        patterns = [
            url(r'^resetpwd/(?P<pk>\w+)/$',
                self.wrapper(self.reset_pwd),
                name=self.get_url_name('reset_pwd')),
        ]
        return patterns
Ejemplo n.º 24
0
class PublishCustomerHandler(PermissionHandle, StarkHandler):
    MAX_CUSTOMER = 150

    def display_record(self, obj=None, is_header=None):
        if is_header:
            return '跟进详情'
        reverse_record = self.reverse_common_url(self.get_url_name('record'),
                                                 id=obj.pk)
        return mark_safe("<a href='%s'>跟进记录</a>" % reverse_record)

    def record(self, request, id, *args, **kwargs):
        form = models.Record.objects.filter(customer_id=id)

        return render(request, 'record_list.html', locals())

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

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

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

    def multi_public(self, request):
        current_user_id = request.session['user']['id']
        pk_list = request.POST.getlist('pk')
        has_customer_count = self.model_class.objects.filter(
            consultant_id=current_user_id, status=2).count()
        # 私户个数限制
        if (len(pk_list) + has_customer_count) > self.MAX_CUSTOMER:
            return HttpResponse('你的私户中已有%s个客户,最多只能申请%s个客户' %
                                (has_customer_count,
                                 (self.MAX_CUSTOMER - has_customer_count)))
        flag = False
        with transaction.atomic():
            origin_queryset = self.model_class.objects.filter(
                id__in=pk_list, consultant__isnull=True,
                status=2).select_for_update()

            if len(origin_queryset) == len(pk_list):
                self.model_class.objects.filter(
                    id__in=pk_list, consultant__isnull=True,
                    status=2).update(consultant_id=current_user_id)
                flag = True
        if not flag:
            return HttpResponse('选中的客户已被其他人申请,请重新选择')

    multi_public.text = '添加到私户'
    action_list = [multi_public]
    model_form_class = PublishCustomerModelForm
Ejemplo n.º 25
0
class PaymentRecordHandler(PermissionHandler, StarkHandler):
    list_display = [
        'consultant',
        get_choice_text('缴费类型', 'pay_type'), 'paid_fee', 'apply_date',
        get_choice_text('状态', 'confirm_status')
    ]

    def get_model_form_class(self, is_add, request, *args, **kwargs):
        customer_id = kwargs['customer_id']
        if models.Student.objects.filter(customer_id=customer_id):
            return self.model_form_class
        return StudentAddModelForm

    model_form_class = PaymentRecordModelForm

    def get_list_display(self, request, *args, **kwargs):
        return self.list_display

    def get_queryset(self, request, *args, **kwargs):
        current_user_id = request.session['user_id']
        return self.model_class.objects.filter(
            customer_id=kwargs['customer_id'],
            customer__consultant_id=current_user_id)

    def get_urls(self):
        patterns = [
            re_path(r'^list/(?P<customer_id>\d+)/$',
                    self.wrapper(self.changelist_view),
                    name=self.get_list_url_name),
            re_path(r'^add/(?P<customer_id>\d+)/$',
                    self.wrapper(self.add_view),
                    name=self.get_add_url_name),
        ]

        return patterns

    def save(self, request, form, is_update, *args, **kwargs):
        customer_id = kwargs.get('customer_id')
        current_user_id = request.session['user_info']['id']
        obj_exists = models.Customer.objects.filter(
            id=customer_id, consultant_id=current_user_id).exists()
        if not obj_exists:
            return HttpResponse('呵呵!非法操作!')
        form.instance.customer_id = customer_id
        form.instance.consultant_id = current_user_id
        form.save()
Ejemplo n.º 26
0
class DeployHandler(StarkHandler):
    list_display = [
        StarkHandler.display_checkbox, 'title',
        get_choice_text('状态', 'status'), StarkHandler.display_edit,
        StarkHandler.display_del
    ]
    # has_add_btn = False
    action_list = [StarkHandler.action_multi_delete]
Ejemplo n.º 27
0
class Quotation_infoHandler(StarkHandler):
    list_display = [
        'qid', 'customer', 'contact',
        get_choice_text('交货时间', 'delivery_time')
    ]
    search_list = [
        'name__contains',
    ]
Ejemplo n.º 28
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):
    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.º 30
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()