day38 crm开发之批量申请客户转私户
web应用中公户代码新增批量申请私户逻辑
# -*- encoding: utf-8 -*-
"""
@File : public_customer.py
@Time : 2022/3/6 17:06
@Author : simon
@Email : 294168604@qq.com
@Software: PyCharm
"""
from django.utils.safestring import mark_safe
from django.conf.urls import url
from django.shortcuts import HttpResponse, render
from stark.service.v1 import StarkHandler, get_choice_text, get_m2m_text, StarkModelForm
from web import models
from django.db import transaction
class PublicCustomerModelForm(StarkModelForm):
class Meta:
model = models.Customer
exclude = ['consultant', ]
class PublicCustomerHandler(StarkHandler):
def display_record(self, obj=None, is_header=None):
if is_header:
return '跟进记录'
record_url = self.reverse_commons_url(self.get_url_name('record_view'), pk=obj.pk)
return mark_safe('查看跟进' % record_url)
list_display = [StarkHandler.display_checkbox,'name', 'qq', get_m2m_text('咨询课程', 'course'), display_record, get_choice_text('状态', 'status')]
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\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, ]
代码里有限制私户数量,需要在models中用户表增加数量限制逻辑
MAX_PRIVATE_CUSTOMER_COUNT = 150
效果图: