hujingpei 4 سال پیش
والد
کامیت
d4bf559dc3
7فایلهای تغییر یافته به همراه89 افزوده شده و 37 حذف شده
  1. 15 1
      apps/customer/views.py
  2. 1 1
      apps/order/filters.py
  3. 35 2
      apps/order/models.py
  4. 10 1
      apps/order/serializers.py
  5. 2 0
      apps/order/urls.py
  6. 14 1
      apps/order/views.py
  7. 12 31
      apps/upload/models.py

+ 15 - 1
apps/customer/views.py

@@ -18,8 +18,11 @@ from .models import ReportCustomer,NewCustomer,Review
 from .serializers import ReportCustomerSerializer,NewCustomerSerializer, ReviewSerializer
 from .filters import ReportCustomerFilter,NewCustomerFilter,ReviewFilter
 from django.contrib.auth import get_user_model
-User = get_user_model()
+from apps.order.models import ProgressDetails
 from apps.order.serializers import Order, OrderSerializer
+from apps.upload.models import Upload
+
+User = get_user_model()
 
 class ReportCustomerViewSet(CustomModelViewSet):
     permission_classes = [isLogin]
@@ -224,6 +227,7 @@ class NewCustomerViewSet(CustomModelViewSet):
         # 更新订单进度
         check_permission(request, 'order.update_order_process')
         stage_progress = request.POST.get('stage_progress')
+        notes = request.POST.get('notes')
 
         try:
             with transaction.atomic():
@@ -257,10 +261,20 @@ class NewCustomerViewSet(CustomModelViewSet):
                     for project in projects:
                         ser.project.add(project.id)
                 # TODO 创建订单流程,保存图片
+                user = self.request.user
+                print(2222222222,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):
                     print(33333333, i)
                     file = request.data.get('file{}'.format(i))
                     print(22222222222, file)
+                    print(4444444,user.store)
+                    if file:
+                        upload = Upload.objects._addnew(user.store, progress_details, user, file)
+                        if not upload:
+                            return response_error('上传失败,请重新上传!')
 
         except ValidationError as e:
             traceback.print_exc()

+ 1 - 1
apps/order/filters.py

@@ -11,4 +11,4 @@ class OrderFilter(django_filters.FilterSet):
 
     class Meta:
         model = Order
-        fields = '__all__'
+        fields = '__all__'

+ 35 - 2
apps/order/models.py

@@ -2,10 +2,9 @@
 from django.db import models
 from django.conf import settings
 from django.utils import timezone
-
 from apps.option.models import Option
 from apps.customer.models import NewCustomer
-
+from utils.format import strftime
 
 class Order(models.Model):
     NORMAL = 1
@@ -42,3 +41,37 @@ class Order(models.Model):
         now = timezone.now()
         no = '%s%d-%s' % ('DD', self.service_user.id, now.strftime('%Y%m%d%H%M%S'))
         return no
+
+
+class ProgressDetails(models.Model):
+
+    order = models.ForeignKey(Order, verbose_name=u'订单', on_delete=models.PROTECT)
+    operation = models.CharField(max_length=500, verbose_name='操作')
+    user = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name=u"操作人", on_delete=models.PROTECT,
+                             editable=False)
+    notes = models.CharField(max_length=500, verbose_name='备注', null=True)
+    operation_time = models.DateTimeField(verbose_name='操作时间', auto_now_add=True)
+
+    class Meta:
+        db_table = 'progress_details'
+        verbose_name = '进度明细'
+        ordering = ('-id', )
+        default_permissions = ()
+
+    def get_details(self,):
+        dict = {
+            'operation': self.operation,
+            'user': self.user.name,
+            'notes': self.notes,
+            'operation_time': strftime(self.operation_time),
+            'images': [],
+        }
+        from apps.upload.models import Upload
+        images = Upload.objects.filter(progress_details=self)
+        for img in images:
+            dict['images'].append(
+                {
+                    'url': img.picture,
+                }
+            )
+        return dict

+ 10 - 1
apps/order/serializers.py

@@ -1,6 +1,6 @@
 # coding=utf-8
 from rest_framework import serializers
-from .models import Order
+from .models import Order,ProgressDetails
 from utils.booleancharfield import TimeCharField
 
 
@@ -22,4 +22,13 @@ class OrderSerializer(serializers.ModelSerializer):
 
     class Meta:
         model = Order
+        fields = '__all__'
+
+
+class ProgressDetailsSerializer(serializers.ModelSerializer):
+    user_text = serializers.CharField(source='user.name', read_only=True)
+
+
+    class Meta:
+        model = ProgressDetails
         fields = '__all__'

+ 2 - 0
apps/order/urls.py

@@ -6,6 +6,8 @@ from .views import *
 
 urlpatterns = [
     url(r'^get_process/$', GetProcessView.as_view()),
+    url(r'^get_details/$', GetDetailsView.as_view()),
+
 ]
 
 router = SimpleRouter()

+ 14 - 1
apps/order/views.py

@@ -9,7 +9,7 @@ from apps.log.models import BizLog
 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
+from apps.order.models import Order,ProgressDetails
 from apps.option.models import Option
 
 class GetProcessView(APIView):
@@ -61,3 +61,16 @@ class OrderViewSet(CustomModelViewSet):
         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)

+ 12 - 31
apps/upload/models.py

@@ -7,6 +7,7 @@ from django.db import models
 from utils.file_operation import UploadFile, DeleteFile
 from django.utils import timezone
 from apps.agent.models import Store
+from apps.order.models import ProgressDetails
 
 class UploadManager(models.Manager):
 
@@ -16,11 +17,11 @@ class UploadManager(models.Manager):
     # def customer_addnew(self, customer, type, file):
     #     return self._addnew(customer.tenant, customer.user, type, file)
 
-    def _addnew(self, tenant, user, type, file):
+    def _addnew(self, store, progress_details, user, file):
         width = None
         height = None
 
-        path = UploadManager.calculatePath(type, tenant.id)
+        path = UploadManager.calculatePath(store.id)
         filename = UploadFile(file, path, user.id)
         fullname = "%s%s" % (settings.MEDIA_ROOT, filename)
         size = os.path.getsize(fullname)
@@ -37,9 +38,9 @@ class UploadManager(models.Manager):
             pass
 
         instance = self.model(
-            tenant=tenant,
+            store=store,
+            progress_details=progress_details,
             user=user,
-            type=type,
             name=file.name,
             picture="%s%s" % (settings.MEDIA_URL, filename),
             width=width,
@@ -49,17 +50,16 @@ class UploadManager(models.Manager):
         instance.save()
         return instance
 
-    def _addnew_voice(self, tenant, user, type, file, time):
+    def _addnew_voice(self, store, user, file, time):
 
-        path = UploadManager.calculatePath(type, tenant.id)
+        path = UploadManager.calculatePath(store.id)
         filename = UploadFile(file, path, user.id)
         fullname = "%s%s" % (settings.MEDIA_ROOT, filename)
         size = os.path.getsize(fullname)
 
         instance = self.model(
-            tenant=tenant,
+            store=store,
             user=user,
-            type=type,
             name=file.name,
             picture="%s%s" % (settings.MEDIA_URL, filename),
             width=200,
@@ -71,36 +71,18 @@ class UploadManager(models.Manager):
         return instance
 
     @staticmethod
-    def calculatePath(type, tenant_id):
-        path_map = {
-            Upload.REPAIR_IMAGE: repair_image,
-            Upload.INSPECTION_IMAGE: inspection_image,
-            Upload.COMPANY_IMAGE: company_image,
-            Upload.REPAIR_VOICE:repair_image,
-        }
+    def calculatePath(store_id):
+        return order_image + str(store_id)  + '/'
 
-        return path_map[type] + str(tenant_id)  + '/'
 
+order_image = "order/"
 
-repair_image = "repair/"
-inspection_image = "inspection/"
-company_image = "company/"
 
 class Upload(models.Model):
-    REPAIR_IMAGE = 1
-    INSPECTION_IMAGE = 2
-    COMPANY_IMAGE = 3
-    REPAIR_VOICE = 4
-    TYPE_CHOICES = (
-        (REPAIR_IMAGE, u'报修图片'),
-        (INSPECTION_IMAGE, u'巡检图片'),
-        (COMPANY_IMAGE, u'营业执照图片'),
-        (REPAIR_VOICE, u'报修语音')
-    )
 
     store = models.ForeignKey(Store, verbose_name=u'门店', on_delete=models.PROTECT)
+    progress_details = models.ForeignKey(ProgressDetails, verbose_name=u'进度明细', on_delete=models.PROTECT)
     user = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name=u'操作人', on_delete=models.PROTECT)
-    type = models.PositiveSmallIntegerField(choices=TYPE_CHOICES, verbose_name=u"类型")
     name = models.CharField(verbose_name=u'图片名', max_length=250)
     picture = models.CharField(verbose_name=u'图片路径', max_length=250)
     width = models.IntegerField(verbose_name=u"图片宽度", blank=True, default=0)
@@ -115,7 +97,6 @@ class Upload(models.Model):
         verbose_name = u'文件上传'
         ordering = ['-create_time']
         index_together = (
-            'type',
             'create_time',
         )
         default_permissions = ()