# coding=utf-8 import traceback from utils.custom_modelviewset import CustomModelViewSet from rest_framework.views import APIView from utils.exceptions import CustomError from .serializers import OrderSerializer from .filters import OrderFilter from apps.log.models import BizLog from django.db.models import Q from utils import response_ok, response_error from utils.permission import isLogin, check_permission from apps.customer.models import NewCustomer from apps.order.models import Order,ProgressDetails from apps.option.models import Option from apps.upload.models import Upload class GetProcessView(APIView): permission_classes = [isLogin] def get(self, request): customer_id = request.query_params.get('customer_id') dispatch = request.query_params.get('dispatch') # 分配服务人员, instance = NewCustomer.objects.filter(id=customer_id).first() if not instance: raise CustomError('当前客户信息有误,请刷新重试!') if instance.stage_progress.end_stage: raise CustomError('当前客户进度已到最后阶段,请勿重复更新!') order = Order.objects.filter(customer=instance).first() # 分配服务人员,不做重复更新判断 if order and order.status == Order.WAIT_DISPATCH and not dispatch: data = { 'error': True, 'error_message': u'当前客户订单等待分配中,请勿重复更新!', } return response_ok(data) option = Option.objects.filter(type=instance.stage_progress.type, sort__gt=instance.stage_progress.sort, enable=True).order_by('sort').first() if option: data = { 'now_process_text':instance.stage_progress.name, 'next_process_text':option.name, 'next_process_id':option.id, } return response_ok(data) else: data = { 'error': True, 'error_message': u'未找到下个阶段进度,请联系管理员设置!', } return response_ok(data) class OrderViewSet(CustomModelViewSet): permission_classes = [isLogin] queryset = Order.objects.filter() serializer_class = OrderSerializer def filter_queryset(self, queryset): queryset = queryset.filter( Q(store_id__in=self.request.user.get_manager_range()) | Q(service_user=self.request.user) | Q(customer__create_user=self.request.user) ) f = OrderFilter(self.request.GET, queryset=queryset) return f.qs def paginate_queryset(self, queryset): if self.paginator is None or self.request.GET.get('export'): return None return self.paginator.paginate_queryset(queryset, self.request, view=self) class GetDetailsView(APIView): permission_classes = [isLogin] def get(self, request): order_id = request.GET.get('order_id') details = ProgressDetails.objects.filter(order_id=order_id).order_by('-operation_time') data = [] for detail in details: dict = detail.get_details() data.append(dict) return response_ok(data) class GetFilesView(APIView): permission_classes = [isLogin] def get(self, request): progress_details_id = request.GET.get('progress_details_id') images = Upload.objects.filter(progress_details_id=progress_details_id) img_data = [] for img in images: img_data.append( { 'url': img.picture, 'create_time': img.create_time, 'file_size': img.file_size, 'user': img.user.name, } ) return response_ok(img_data)