瀏覽代碼

商品订单

lyh 1 年之前
父節點
當前提交
6f075baadc

+ 1 - 12
apps/product/filters.py

@@ -2,7 +2,7 @@
 
 import django_filters
 
-from .models import Product, ProductImg, ProductOrder
+from .models import Product, ProductImg
 
 
 class ProductFilter(django_filters.FilterSet):
@@ -18,14 +18,3 @@ class ProductImageFilter(django_filters.FilterSet):
     class Meta:
         model = ProductImg
         fields = '__all__'
-
-
-class ProductOrderFilter(django_filters.FilterSet):
-    customer_name = django_filters.CharFilter(field_name='customer_address__name', lookup_expr='icontains')
-    product_name = django_filters.CharFilter(field_name='product__name', lookup_expr='icontains')
-    tel = django_filters.CharFilter(field_name='customer_address__tel', lookup_expr='icontains')
-    status = django_filters.CharFilter(field_name='status')
-
-    class Meta:
-        model = ProductOrder
-        fields = '__all__'

+ 0 - 27
apps/product/models.py

@@ -36,31 +36,4 @@ class ProductImg(models.Model):
     class Meta:
         db_table = 'product_img'
         verbose_name = u'商品图片'
-        default_permissions = ()
-
-
-class ProductOrder(models.Model):
-    WAIT_PAY = 1
-    PAID = 2
-    FINISHED = 3
-    STATUS_CHOICES = (
-        (WAIT_PAY, u'待支付'),
-        (PAID, u'已支付'),
-        (FINISHED, u'已完成'),
-    )
-    product = models.ForeignKey(Product, verbose_name=u'商品', on_delete=models.PROTECT)
-    create_time = models.DateTimeField(verbose_name=u"添加时间", auto_now_add=True, editable=False)
-    no = models.CharField(max_length=64, verbose_name=u"单号", null=True, editable=False, blank=True)
-    status = models.PositiveSmallIntegerField(choices=STATUS_CHOICES, verbose_name=u'状态', default=WAIT_PAY)
-    customer = models.ForeignKey(Customer, verbose_name=u'客户', on_delete=models.PROTECT, editable=False)
-    customer_address = models.ForeignKey(CustomerAddress, verbose_name=u'收货信息', on_delete=models.PROTECT, editable=False)
-    count = models.IntegerField(verbose_name=u'购买数量')
-    price = models.BigIntegerField(verbose_name=u'单价', editable=False)
-    amount = models.BigIntegerField(verbose_name=u'合计金额', editable=False)
-    notes = models.CharField(max_length=1000, verbose_name=u'备注', null=True)
-    delete = models.BooleanField(verbose_name=u'删除', default=False, editable=False)
-
-    class Meta:
-        db_table = 'product_order'
-        verbose_name = u'商品订单'
         default_permissions = ()

+ 1 - 29
apps/product/serializers.py

@@ -9,7 +9,7 @@ from utils.exceptions import CustomError
 from apps.base import Formater
 from apps.images.models import Images
 
-from .models import Product, ProductImg, ProductOrder
+from .models import Product, ProductImg
 
 
 class ProductSerializer(serializers.ModelSerializer):
@@ -72,31 +72,3 @@ class ProductImgSerializer(serializers.ModelSerializer):
         model = ProductImg
         fields = '__all__'
 
-
-class ProductOrderSerializer(serializers.ModelSerializer):
-    product_name = serializers.CharField(source='product.name', read_only=True)
-    name = serializers.CharField(source='customer.name', read_only=True)
-    customer_name = serializers.CharField(source='customer_address.name', read_only=True)
-    customer_tel = serializers.CharField(source='customer_address.tel', read_only=True)
-    area = serializers.CharField(source='customer_address.area', read_only=True)
-    addr = serializers.CharField(source='customer_address.addr', read_only=True)
-    status_text = serializers.CharField(source='get_status_display', read_only=True)
-    create_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M', read_only=True)
-    price = serializers.SerializerMethodField()
-    amount = serializers.SerializerMethodField()
-
-    def get_price(self, obj):
-        return Formater.formatPriceShow(obj.price)
-
-    def get_amount(self, obj):
-        return Formater.formatAmountShow(obj.amount)
-
-    class Meta:
-        model = ProductOrder
-        fields = '__all__'
-
-    def validate(self, attrs):
-        if 'price' in attrs:
-            attrs['price'] = Formater.formatPrice(attrs['price'])
-        return attrs
-

+ 0 - 1
apps/product/urls.py

@@ -10,7 +10,6 @@ urlpatterns = [
 ]
 
 router = SimpleRouter()
-router.register(r'order', ProductOrderViewSet)
 router.register(r'images', ProductImageViewSet)
 router.register(r'', ProductViewSet)
 urlpatterns += router.urls

+ 0 - 21
apps/product/views.py

@@ -87,24 +87,3 @@ class ProductImageViewSet(CustomModelViewSet):
             instance.delete()
             img.del_images()
         return response_ok()
-
-
-class ProductOrderViewSet(CustomModelViewSet):
-    queryset = ProductOrder.objects.filter(delete=False)
-    serializer_class = ProductOrderSerializer
-
-    def filter_queryset(self, queryset):
-        f = ProductOrderFilter(self.request.GET, queryset=queryset)
-        return f.qs
-
-    @action(methods=['post'], detail=True)
-    def finish(self, request, pk):
-        order = ProductOrder.objects.filter(id=pk).first()
-        with transaction.atomic():
-            if order.status == ProductOrder.WAIT_PAY:
-                raise CustomError(u'订单未支付!')
-            if order.status == ProductOrder.FINISHED:
-                raise CustomError(u'订单已完成!')
-            order.status = ProductOrder.FINISHED
-            order.save()
-        return response_ok()

+ 0 - 0
apps/product_order/__init__.py


+ 16 - 0
apps/product_order/filters.py

@@ -0,0 +1,16 @@
+# coding=utf-8
+
+import django_filters
+
+from .models import ProductOrder
+
+
+class ProductOrderFilter(django_filters.FilterSet):
+    customer_name = django_filters.CharFilter(field_name='customer_address__name', lookup_expr='icontains')
+    product_name = django_filters.CharFilter(field_name='product__name', lookup_expr='icontains')
+    tel = django_filters.CharFilter(field_name='customer_address__tel', lookup_expr='icontains')
+    status = django_filters.CharFilter(field_name='status')
+
+    class Meta:
+        model = ProductOrder
+        fields = '__all__'

+ 35 - 0
apps/product_order/models.py

@@ -0,0 +1,35 @@
+# coding=utf-8
+
+from django.db import models
+from django.conf import settings
+
+from apps.foundation.models import Option
+from apps.product.models import Product
+from apps.customer.models import Customer, CustomerAddress
+
+
+class ProductOrder(models.Model):
+    WAIT_PAY = 1
+    PAID = 2
+    FINISHED = 3
+    STATUS_CHOICES = (
+        (WAIT_PAY, u'待支付'),
+        (PAID, u'已支付'),
+        (FINISHED, u'已完成'),
+    )
+    product = models.ForeignKey(Product, verbose_name=u'商品', on_delete=models.PROTECT)
+    create_time = models.DateTimeField(verbose_name=u"添加时间", auto_now_add=True, editable=False)
+    no = models.CharField(max_length=64, verbose_name=u"单号", null=True, editable=False, blank=True)
+    status = models.PositiveSmallIntegerField(choices=STATUS_CHOICES, verbose_name=u'状态', default=WAIT_PAY)
+    customer = models.ForeignKey(Customer, verbose_name=u'客户', on_delete=models.PROTECT, editable=False)
+    customer_address = models.ForeignKey(CustomerAddress, verbose_name=u'收货信息', on_delete=models.PROTECT, editable=False)
+    count = models.IntegerField(verbose_name=u'购买数量')
+    price = models.BigIntegerField(verbose_name=u'单价', editable=False)
+    amount = models.BigIntegerField(verbose_name=u'合计金额', editable=False)
+    notes = models.CharField(max_length=1000, verbose_name=u'备注', null=True)
+    delete = models.BooleanField(verbose_name=u'删除', default=False, editable=False)
+
+    class Meta:
+        db_table = 'product_order'
+        verbose_name = u'商品订单'
+        default_permissions = ()

+ 40 - 0
apps/product_order/serializers.py

@@ -0,0 +1,40 @@
+# coding=utf-8
+
+from django.conf import settings
+
+from rest_framework import serializers
+
+from utils.exceptions import CustomError
+
+from apps.base import Formater
+from apps.images.models import Images
+
+from .models import ProductOrder
+
+class ProductOrderSerializer(serializers.ModelSerializer):
+    product_name = serializers.CharField(source='product.name', read_only=True)
+    name = serializers.CharField(source='customer.name', read_only=True)
+    customer_name = serializers.CharField(source='customer_address.name', read_only=True)
+    customer_tel = serializers.CharField(source='customer_address.tel', read_only=True)
+    area = serializers.CharField(source='customer_address.area', read_only=True)
+    addr = serializers.CharField(source='customer_address.addr', read_only=True)
+    status_text = serializers.CharField(source='get_status_display', read_only=True)
+    create_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M', read_only=True)
+    price = serializers.SerializerMethodField()
+    amount = serializers.SerializerMethodField()
+
+    def get_price(self, obj):
+        return Formater.formatPriceShow(obj.price)
+
+    def get_amount(self, obj):
+        return Formater.formatAmountShow(obj.amount)
+
+    class Meta:
+        model = ProductOrder
+        fields = '__all__'
+
+    def validate(self, attrs):
+        if 'price' in attrs:
+            attrs['price'] = Formater.formatPrice(attrs['price'])
+        return attrs
+

+ 14 - 0
apps/product_order/urls.py

@@ -0,0 +1,14 @@
+# coding=utf-8
+
+from django.conf.urls import url, include
+from rest_framework.routers import SimpleRouter
+
+from .views import *
+
+urlpatterns = [
+
+]
+
+router = SimpleRouter()
+router.register(r'order', ProductOrderViewSet)
+urlpatterns += router.urls

+ 33 - 0
apps/product_order/views.py

@@ -0,0 +1,33 @@
+# coding=utf-8
+
+from django.db import transaction
+
+from rest_framework.decorators import action
+
+from utils import response_ok
+from utils.custom_modelviewset import CustomModelViewSet
+
+from .filters import *
+from .serializers import *
+from .models import *
+
+
+class ProductOrderViewSet(CustomModelViewSet):
+    queryset = ProductOrder.objects.filter(delete=False)
+    serializer_class = ProductOrderSerializer
+
+    def filter_queryset(self, queryset):
+        f = ProductOrderFilter(self.request.GET, queryset=queryset)
+        return f.qs
+
+    @action(methods=['post'], detail=True)
+    def finish(self, request, pk):
+        order = ProductOrder.objects.filter(id=pk).first()
+        with transaction.atomic():
+            if order.status == ProductOrder.WAIT_PAY:
+                raise CustomError(u'订单未支付!')
+            if order.status == ProductOrder.FINISHED:
+                raise CustomError(u'订单已完成!')
+            order.status = ProductOrder.FINISHED
+            order.save()
+        return response_ok()

+ 1 - 1
shop/settings.py

@@ -52,7 +52,7 @@ INSTALLED_APPS = [
     'apps.activity',
     'apps.customer',
     'apps.store',
-    # 'apps.option',
+    'apps.product_order',
     # 'apps.package',
     # 'apps.package_order',
     # 'apps.pay',

+ 1 - 0
shop/urls.py

@@ -31,6 +31,7 @@ urlpatterns = [
     url(r'^activity/', include('apps.activity.urls')),
     url(r'^store/', include('apps.store.urls')),
     url(r'^customer/', include('apps.customer.urls')),
+    url(r'^product_order/', include('apps.product_order.urls')),
     # url(r'^api/', include('apps.api.urls')),
 ]
 

+ 2 - 2
uis/views/product_order/index.html

@@ -81,7 +81,7 @@
 
     table.render({
       elem: '#datagrid'
-      ,url: '/product/order/'
+      ,url: '/product_order/order/'
       ,cols: [[
         {field:'no', title:'单号',width: 100}
        ,{field:'status_text', title:'状态',width: 100}
@@ -129,7 +129,7 @@
          layer.confirm('确定订单已完成吗?', function(index){
             layer.close(index);
             layui.admin.req({
-                url: '/product/order/'+data.id + '/finish/'
+                url: '/product_order/order/'+data.id + '/finish/'
                 ,type: 'post'
                 ,done: function(res){
                     if(res.code === 1){