Browse Source

任职门店列表,修改任职门店,页面数量统计

胡敬培 4 years ago
parent
commit
6d51b71f70
5 changed files with 106 additions and 2 deletions
  1. 15 0
      apps/account/models.py
  2. 1 0
      apps/account/urls.py
  3. 66 1
      apps/account/views.py
  4. 1 0
      apps/customer/urls.py
  5. 23 1
      apps/customer/views.py

+ 15 - 0
apps/account/models.py

@@ -80,6 +80,7 @@ class User(AbstractBaseUser, PermissionsMixin):
             ('delete_user', u'删除'),
             ('check_user', u'入职审核'),
             ('manager_store', u'管理门店'),
+            ('office_store', u'任职门店'),
         ]
 
     def __unicode__(self):
@@ -162,4 +163,18 @@ class ManageStoreUser(models.Model):
             ('manager_permissions', u'管理'),
         ]
 
+
+class OfficeStoreUser(models.Model):
+
+    store = models.ForeignKey(Store, verbose_name=u"门店", null=True, blank=True, on_delete=models.PROTECT)
+    office_user = models.ForeignKey(User, verbose_name=u"任职人员",related_name='office_user_ref_user', on_delete=models.PROTECT)
+
+    class Meta:
+        db_table = "auth_user_office_store"
+        verbose_name = u"任职门店" #人员任职门店
+        default_permissions = ()
+        permissions = [
+
+        ]
+
 Group.add_to_class('create_user', models.ForeignKey(User, verbose_name=u"创建人", on_delete=models.PROTECT, editable=False))

+ 1 - 0
apps/account/urls.py

@@ -12,6 +12,7 @@ urlpatterns = [
     url(r'^permission/all/$', PermissionsListView.as_view()), # 权限管理,编辑,加载所有权限
     url(r'^store/tree/$', StoreTreeView.as_view()), # 人员管理,管理门店,加载门店
     url(r'^employee_tree/$', EmployeeTreeView.as_view()), #人员列表
+    url(r'^office_store/$', OfficeStoreView.as_view()), # 任职门店
 ]
 
 router = SimpleRouter()

+ 66 - 1
apps/account/views.py

@@ -17,7 +17,7 @@ User = get_user_model()
 from apps.account.serializers import JWTSerializer, EmployeeSerializer, GroupDictSerializer, GroupSerializer
 from utils.custom_modelviewset import CustomModelViewSet
 from apps.account.filters import UserFilter, GroupFilter
-from apps.account.models import ManageStoreUser
+from apps.account.models import ManageStoreUser,OfficeStoreUser
 from apps.log.models import BizLog
 from apps.account.consts import PermissionMenu
 from collections import OrderedDict
@@ -159,6 +159,23 @@ class EmployeeViewSet(CustomModelViewSet):
             traceback.print_exc()
             return response_error(u'保存失败')
 
+    @action(methods=['post'], detail=True)
+    def office(self, request, pk):
+        check_permission(request, 'account.office_store')
+        data = json.loads(request.POST.get('stores'))
+        try:
+            with transaction.atomic():
+                instance = self.get_object()
+                OfficeStoreUser.objects.filter(office_user_id=pk).delete()
+                for row in data:
+                    OfficeStoreUser.objects.create(store_id=row, office_user_id=pk)
+                BizLog.objects.addnew(self.request.user, BizLog.INSERT,
+                                      u'设置账号[%s]任职门店,id=%d' % (instance.username, instance.id), data)
+            return response_ok()
+        except Exception as e:
+            traceback.print_exc()
+            return response_error(u'保存失败')
+
 
 class GroupsViewSet(CustomModelViewSet):
     permission_classes = [isLogin, ]
@@ -412,3 +429,51 @@ class HomeStatisticsView(APIView):
             return response_ok(statistics)
         else:
             return response_ok(statistics)
+
+
+class OfficeStoreView(APIView):
+    permission_classes = [isLogin, ]
+
+    @permission_required('account.office_store')
+    def get(self, request):
+        id = request.GET.get('id')
+        store_data = []
+        # 查询当前用户的代理商和管理的门店
+        general_agents = GeneralAgent.objects.filter()
+        if not request.user.is_superuser:
+            general_agents = GeneralAgent.objects.filter(id=request.user.general_agent_id)
+        general_agents = general_agents.values('id', 'name')
+        for general_agent in general_agents:
+            general_agent_item = {
+                'title': general_agent['name'],
+                'id': general_agent['id'],
+                'field': 'general_agent',
+                'children': [],
+            }
+            agents = Agent.objects.filter(general_agent_id=general_agent['id'])
+            if request.user.agent:
+                agents = agents.filter(id=request.user.agent_id)
+            agents = agents.values('id', 'name')
+            for agent in agents:
+                agent_item = {
+                    'title': agent['name'],
+                    'id': agent['id'],
+                    'field': 'agent',
+                    'children': [],
+                }
+                general_agent_item['children'].append(agent_item)
+                stores = Store.objects.filter(agent_id=agent['id'], id__in=request.user.get_manager_range(),
+                                              check_user__isnull=False, enable=True).values('id', 'name')
+                for store in stores:
+                    office_store = OfficeStoreUser.objects.filter(office_user_id=id, store_id=store['id']).first()
+                    checked = office_store and True or False
+                    store_item = {
+                        'title': store['name'],
+                        'id': store['id'],
+                        'checked': checked,
+                        'field': 'store_{}'.format(store['id']),
+                    }
+                    agent_item['children'].append(store_item)
+            store_data.append(general_agent_item)
+
+        return response_ok(store_data)

+ 1 - 0
apps/customer/urls.py

@@ -8,6 +8,7 @@ urlpatterns = [
     url(r'^dict/$', ReportCustomerDictView.as_view()),
     url(r'^get_user/$', UserDictView.as_view()),
     url(r'^stage_count/$', StageCountView.as_view()), # 客户阶段提醒
+    url(r'^list_count/$', ListCountView.as_view()),
 
 ]
 

+ 23 - 1
apps/customer/views.py

@@ -21,6 +21,7 @@ from django.contrib.auth import get_user_model
 from apps.order.models import ProgressDetails
 from apps.order.serializers import Order, OrderSerializer
 from apps.upload.models import Upload
+from apps.account.models import OfficeStoreUser
 
 User = get_user_model()
 
@@ -151,9 +152,10 @@ class UserDictView(APIView):
 
     def get(self, request):
         store = request.user.store
+        office_user_id = OfficeStoreUser.objects.filter(store=store).values('office_user_id')
         if not store:
             return response_error('当前账号未绑定门店,禁止分配客户!')
-        users = User.objects.filter(store=store).values('id', 'name')
+        users = User.objects.filter(Q(store=store) | Q(id__in=office_user_id)).values('id', 'name')
         users = [{'value': user['id'], 'lable': user['name']} for user in users]
         return response_ok(users)
 
@@ -460,3 +462,23 @@ class ReviewViewSet(CustomModelViewSet):
         except Exception as e:
             return response_error(str(e))
         return response_ok()
+
+
+class ListCountView(APIView):
+    permission_classes = [isLogin]
+
+    def get(self, request):
+        report_customer_count = ReportCustomer.objects.filter(Q(store_id__in=self.request.user.get_manager_range()) |
+                                                              Q(create_user=self.request.user)).count()
+        new_customer_count = NewCustomer.objects.filter(Q(store_id__in=self.request.user.get_manager_range()) |
+                                                        Q(create_user=self.request.user) |
+                                                        Q(track_user=self.request.user)).count()
+        review_count = Review.objects.filter(store_id__in=self.request.user.get_manager_range()).count()
+
+        data ={
+            'report_customer_count' : report_customer_count,  # 报备审核数量
+            'new_customer_count': new_customer_count,  # 潜客跟踪数量
+            'review_count': review_count,  # 跟踪审核数量
+        }
+        return response_ok(data)
+