Forráskód Böngészése

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	apps/order/models.py
wushaodong 4 éve
szülő
commit
996796a3db

+ 2 - 13
apps/customer/serializers.py

@@ -166,17 +166,6 @@ class NewCustomerSerializer(serializers.ModelSerializer):
 
     def update(self, instance, validated_data):
         instance = super(NewCustomerSerializer, self).update(instance, validated_data)
-        order = Order.objects.filter(customer=instance).first()
-        if not order:
-            order = Order.objects.create(customer=instance, service_user_id=instance.track_user.id, status=Order.NORMAL,
-                                         stage_progress=instance.stage_progress)
-            projects = instance.project.all()
-            for project in projects:
-                order.project.add(project.id)
-            order.no = order.get_no()
-            order.save()
-        if order:
-            Order.objects.filter(no=order.no).update(stage_progress=instance.stage_progress)
         return instance
 
 
@@ -185,9 +174,9 @@ class ReviewSerializer(serializers.ModelSerializer):
     check_user_text = serializers.CharField(source='check_user.name', read_only=True)
     check_status_text = serializers.CharField(source='get_check_status_display', read_only=True)
     create_time_f = serializers.DateTimeField(source='create_time', format=settings.SHORT_DATETIME_FORMAT,
-                                           read_only=True)
+                                              read_only=True)
     check_time_f = serializers.DateTimeField(source='check_time', format=settings.SHORT_DATETIME_FORMAT,
-                                           read_only=True)
+                                             read_only=True)
 
     next_time_f = DateCharField(source='customer.next_time', read_only=True)
     is_giveup_text = BooleanCharField(source='is_giveup', read_only=True)

+ 4 - 4
apps/customer/views.py

@@ -86,7 +86,7 @@ class ReportCustomerViewSet(CustomModelViewSet):
                                        track_user_id=user_id, next_time=next_time, stage_progress=stage_progress,
                                        create_user=instance.create_user,store=instance.store,
                                        name=instance.name,tel=instance.tel,village=instance.village,
-                                       address=instance.address,source=instance.source,notes=instance.notes,
+                                       address=instance.address, source=instance.source, notes=instance.notes,
                                        )
             projects = instance.project.all()
             for project in projects:
@@ -263,20 +263,20 @@ class NewCustomerViewSet(CustomModelViewSet):
                         'store': instance.store,
                     }
                     ser = Order.objects.create(**data)
+                    ser.notes = instance.notes
                     ser.no = ser.get_no()
                     ser.save()
                     projects = instance.project.all()
                     for project in projects:
                         ser.project.add(project.id)
-                # TODO 创建订单流程,保存图片
+                # 创建订单流程,保存图片
                 user = self.request.user
                 operation = u'更新进度为:{}'.format(order.stage_progress.name)
                 progress_details = ProgressDetails.objects.create(order=order, user=user, operation=operation, notes=notes)
-
                 for i in range(6):
                     file = request.data.get('file{}'.format(i))
                     if file:
-                        upload = Upload.objects._addnew(user.store, progress_details, user, file)
+                        upload = Upload.objects._addnew(instance.store, progress_details, user, file)
                         if not upload:
                             return response_error('上传失败,请重新上传!')
 

+ 1 - 0
apps/order/__init__.py

@@ -0,0 +1 @@
+# coding=utf-8

+ 12 - 11
apps/order/models.py

@@ -6,6 +6,7 @@ from apps.option.models import Option
 from apps.customer.models import NewCustomer
 from utils.format import strftime
 from apps.agent.models import Store
+from utils.exceptions import CustomError
 
 class Order(models.Model):
     NORMAL = 1
@@ -46,6 +47,17 @@ class Order(models.Model):
         no = '%s%d-%s' % ('DD', self.service_user.id, now.strftime('%Y%m%d%H%M%S'))
         return no
 
+    @staticmethod
+    def get_instance_by_id(id):
+        try:
+            id = int(id)
+        except:
+            raise CustomError('无效的报修单ID')
+        instance = Order.objects.filter(pk=id, delete=False).first()
+        if not instance:
+            raise CustomError('未找到对应的报修工单')
+        return instance
+
 
 class ProgressDetails(models.Model):
 
@@ -61,14 +73,3 @@ class ProgressDetails(models.Model):
         verbose_name = '进度明细'
         ordering = ('-id', )
         default_permissions = ()
-
-    def get_details(self):
-        dict = {
-            'progress_details_id': self.id,
-            'operation': self.operation,
-            'user': self.user.name,
-            'notes': self.notes,
-            'operation_time': strftime(self.operation_time),
-        }
-
-        return dict

+ 3 - 2
apps/order/serializers.py

@@ -27,8 +27,9 @@ class OrderSerializer(serializers.ModelSerializer):
 
 class ProgressDetailsSerializer(serializers.ModelSerializer):
     user_text = serializers.CharField(source='user.name', read_only=True)
-
+    operation_time_f = serializers.DateTimeField(source='operation_time', format=settings.SHORT_DATETIME_FORMAT,
+                                                 read_only=True)
 
     class Meta:
         model = ProgressDetails
-        fields = '__all__'
+        fields = '__all__'

+ 15 - 19
apps/order/views.py

@@ -1,9 +1,13 @@
 # coding=utf-8
 import traceback
-from utils.custom_modelviewset import CustomModelViewSet
 from rest_framework.views import APIView
+from rest_framework.decorators import action
+from django.db import transaction
+from django.conf import settings
+
+from utils.custom_modelviewset import CustomModelViewSet
 from utils.exceptions import CustomError
-from .serializers import OrderSerializer
+from .serializers import OrderSerializer,ProgressDetailsSerializer
 from .filters import OrderFilter
 from apps.log.models import BizLog
 from django.db.models import Q
@@ -13,6 +17,7 @@ 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
+from apps.upload.serializers import UploadSerializer
 
 class GetProcessView(APIView):
     permission_classes = [isLogin]
@@ -76,28 +81,19 @@ 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)
+        data = ProgressDetailsSerializer(details, many=True).data
         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)
+        # 附件内容
+        id = request.GET.get('id')
+        images = Upload.objects.filter(progress_details_id=id)
+        img_data = UploadSerializer(images, many=True).data
+        return response_ok(img_data)

+ 4 - 1
apps/upload/serializers.py

@@ -6,7 +6,10 @@ from .models import Upload
 
 
 class UploadSerializer(serializers.ModelSerializer):
+    user_text = serializers.CharField(source='user.name', read_only=True)
+    create_time_f = serializers.DateTimeField(source='create_time', format=settings.SHORT_DATETIME_FORMAT,
+                                              read_only=True)
 
     class Meta:
         model = Upload
-        fields = ('picture', 'width', 'height', 'type', 'voice_time')
+        fields = ('picture', 'create_time_f', 'file_size', 'user_text')

+ 3 - 3
uis/views/order/detail.html

@@ -98,9 +98,9 @@
             , url: '/order/get_details/?order_id=' + order_id
             , cols: [[
                 {field: 'operation', title: "操作", width: 200}
-                , {field: 'operation_time', title: '操作时间', width: 150}
+                , {field: 'operation_time_f', title: '操作时间', width: 150}
                 , {field: 'notes', title: '备注', width: 200}
-                , {field: 'user', title: '操作人', width: 80}
+                , {field: 'user_text', title: '操作人', width: 120}
                 , {width: 100, align: 'center', fixed: 'right', toolbar: '#customer-operate-bar'}
             ]]
             , page: true
@@ -119,7 +119,7 @@
                     btn1: function (index, layero) {
                         layer.close(index);//关闭当前按钮
                     },
-                    content: 'imgsInfo.html?progress_details_id=' + data.progress_details_id
+                    content: 'imgsInfo.html?id=' + data.id
                 });
             }
         });

+ 3 - 72
uis/views/order/dispatch_process_edit.html

@@ -98,37 +98,6 @@
 </div>
 <script src="../../layuiadmin/layui/layui.js"></script>
 <script>
-    //即将上传的文件数组
-    var filesList = [];
-    //渲染的图片列表
-    var imgsList = [];
-
-    //渲染待上传的图片列表
-    var renderImgsList = function (list) {
-        var html = "";
-        list.forEach((item, index) => {
-            html += "<div class='imgItem'>\n";
-            html += "<img src='" + item + "' class='image'>\n";
-            html += '<div class="option">\n';
-            html += '<div onclick="showImg(' + index + ')" class="optionItem">查看</div>\n';
-            html += '<div onclick="deleteImg(' + index + ')" class="optionItem">删除</div>\n';
-            html += '</div>\n';
-            html += '</div>\n';
-        })
-        layui.$('#imgsList').html(html);
-    }
-
-    var showImg = function (index) {
-        var newPage = window.open();
-        newPage.document.write("<img src=" + imgsList[index] + " />")
-    };
-
-    var deleteImg = function (index) {
-        filesList.splice(index, 1);
-        imgsList.splice(index, 1);
-        renderImgsList(imgsList);
-    };
-
     layui.link('../../../layuiadmin/style/autocomplete.css');
     layui.config({
         base: '../../../layuiadmin/' //静态资源所在路径
@@ -138,7 +107,6 @@
     }).use(['index', 'form', 'autocomplete', 'upload'], function () {
         var $ = layui.$
             , admin = layui.admin
-            , upload = layui.upload
             , form = layui.form;
 
         var customer_id = layui.view.getParameterByName('customer_id');
@@ -166,58 +134,21 @@
                 $('#current_process').append(res.data.now_process_text)
                 //下一进度
                 $('#next_process').append(res.data.next_process_text);
-                next_process_id = res.data.next_process_id
-            }
-        });
-
-
-        //拖拽上传
-        upload.render({
-            elem: '#upload_img'
-            , accept: 'file'
-            , exts: 'jpg|png|jpeg|bmp'
-            , acceptMime: '.jpg,.png,.jpeg,.bmp'
-            , data: {}
-            , multiple: true
-            , number: 6
-            , auto: false
-            , choose: function (obj) {
-                if (imgsList.length >= 6) {
-                    layer.msg("图片最多只允许上传6张", {icon: 2});
-                    return
-                }
-                //预读本地文件,如果是多文件,则会遍历。(不支持ie8/9)
-                obj.preview(function (index, file, result) {
-                    filesList.push(file);
-                    imgsList.push(result);
-                    // 有图片列表的话渲染图片
-                    if (imgsList.length > 0) {
-                        renderImgsList(imgsList)
-                    }
-                });
+                next_process_id = res.data.next_process_id;
             }
         });
 
 
         form.on('submit(component-form-element)', function (data) {
-            if (filesList.length === 0) {
-                layer.msg("请先选择图片!", {icon: 2});
-                return false
-            }
+            var submitData = data.field;
             if (!next_process_id) {
                 layer.msg("下个进度阶段有误,请刷新重试!", {icon: 2});
                 return false
             }
-            var formData = new FormData();
-            formData.append("stage_progress", next_process_id);
-            formData.append("notes", data.field.notes);
-            filesList.forEach((item, index) => {
-                formData.append(`file${index}`, item)
-            });
             var url = '/customer/new_customer/' + customer_id + '/add_order/';
             admin.req({
                 url: url
-                , data: formData
+                , data: submitData
                 , contentType: false
                 , processData: false
                 , type: 'post'

+ 5 - 5
uis/views/order/imgsInfo.html

@@ -56,15 +56,15 @@
             , admin = layui.admin
             , formSelects = layui.formSelects
             , form = layui.form;
-        var progress_details_id = layui.view.getParameterByName('progress_details_id');
+        var id = layui.view.getParameterByName('id');
 
         table.render({
             elem: '#customer_datagrid_imgs'
-            , url: '/order/get_files/?progress_details_id=' + progress_details_id
+            , url: '/order/get_files/?id=' + id
             , cols: [[
-                {field: 'create_time', title: "上传时间", width: 220}
+                {field: 'create_time_f', title: "上传时间", width: 220}
                 , {field: 'file_size', title: '文件大小', width: 120}
-                , {field: 'user', title: '上传人', width: 120}
+                , {field: 'user_text', title: '上传人', width: 120}
                 , {width: 80, align: 'center', fixed: 'right', toolbar: '#customer-imgs-operate-bar'}
             ]]
         });
@@ -74,7 +74,7 @@
             var data = obj.data;
             if (obj.event === 'order_search') {
                 var newPage=window.open();
-                newPage.document.write("<img src="+data.url+" />")
+                newPage.document.write("<img src="+data.picture+" />")
             }
         });
     });

+ 2 - 2
uis/views/order/update_process.html

@@ -42,7 +42,7 @@
         }
 
         .imgItem {
-            margin: 0 10px;
+            margin: 3px 10px;
         }
 
         .option {
@@ -89,7 +89,7 @@
                             <label class="layui-form-label"><font color='red' size="4">*</font>上传图片:</label>
                             <div class="imgsContent">
                                 <div class="layui-upload-drag" id="upload_img">
-                                    <div id="upload_img">
+                                    <div>
                                         <p style="padding-bottom: 10px">多选,最多选6张</p>
                                         <i class="layui-icon"></i>
                                         <p>点击上传,或将图片拖到此处</p>