|
@@ -0,0 +1,172 @@
|
|
|
+# coding=utf-8
|
|
|
+
|
|
|
+from django.db import transaction
|
|
|
+from rest_framework.decorators import action
|
|
|
+from rest_framework.views import APIView
|
|
|
+from utils import response_ok
|
|
|
+from utils.permission import IsEmployee
|
|
|
+from utils.exceptions import CustomError
|
|
|
+from utils.custom_modelviewset import CustomModelViewSet
|
|
|
+from apps.log.models import BizLog
|
|
|
+from apps.images.models import Images
|
|
|
+from apps.commodity.models import Commodity, CommodityImage
|
|
|
+from apps.commodity.filters import CommodityFilter, CommodityImageFilter
|
|
|
+from .serializers import CommoditySerializer, CommodityImageSerializer
|
|
|
+from apps.option.models import Option
|
|
|
+from apps.base import Formater
|
|
|
+
|
|
|
+
|
|
|
+class CommodityDict(APIView):
|
|
|
+ permission_classes = [IsEmployee, ]
|
|
|
+
|
|
|
+ def get(self, request):
|
|
|
+ rows = Option.objects.filter(type=Option.COMMODITY_CATEGORY, enable=True, delete=False).order_by('sort').values('id', 'name')
|
|
|
+ data = [{'value': row['id'], 'name': row['name']} for row in rows]
|
|
|
+ ret = {
|
|
|
+ 'category': data
|
|
|
+ }
|
|
|
+ return response_ok(ret)
|
|
|
+
|
|
|
+
|
|
|
+class CommodityViewSet(CustomModelViewSet):
|
|
|
+ permission_classes = [IsEmployee, ]
|
|
|
+ queryset = Commodity.objects.filter(delete=False)
|
|
|
+ serializer_class = CommoditySerializer
|
|
|
+
|
|
|
+ def filter_queryset(self, queryset):
|
|
|
+ queryset = queryset.filter()
|
|
|
+ f = CommodityFilter(self.request.GET, queryset=queryset)
|
|
|
+ return f.qs
|
|
|
+
|
|
|
+ def perform_create(self, serializer):
|
|
|
+ super(CommodityViewSet, self).perform_create(serializer)
|
|
|
+ instance = serializer.instance
|
|
|
+ validated_data = serializer.validated_data
|
|
|
+ BizLog.objects.addnew(self.request.user, BizLog.INSERT, u'添加商品[%s],id=%d' % (instance.name, instance.id), validated_data)
|
|
|
+
|
|
|
+ def perform_update(self, serializer):
|
|
|
+ super(CommodityViewSet, self).perform_update(serializer)
|
|
|
+ instance = serializer.instance
|
|
|
+ validated_data = serializer.validated_data
|
|
|
+ BizLog.objects.addnew(self.request.user, BizLog.UPDATE, u'修改商品[%s], id=%d' % (instance.name, instance.id), validated_data)
|
|
|
+
|
|
|
+ def destroy(self, request, *args, **kwargs):
|
|
|
+ with transaction.atomic():
|
|
|
+ instance = self.get_object()
|
|
|
+ instance.delete = True
|
|
|
+ instance.save()
|
|
|
+ BizLog.objects.addnew(self.request.user, BizLog.DELETE, u'删除商品[%s],id=%d' % (instance.name, instance.id))
|
|
|
+ return response_ok()
|
|
|
+
|
|
|
+ @action(methods=['post'], detail=True)
|
|
|
+ def update_image(self, request, pk):
|
|
|
+ file = request.FILES.get('image', None)
|
|
|
+ user = request.user
|
|
|
+ instance = self.get_object()
|
|
|
+ if instance.delete:
|
|
|
+ raise CustomError(u'该商品已删除,禁止操作!')
|
|
|
+
|
|
|
+ with transaction.atomic():
|
|
|
+ serializer = self.get_serializer(instance, data=request.data)
|
|
|
+ serializer.is_valid(raise_exception=True)
|
|
|
+ self.perform_update(serializer)
|
|
|
+
|
|
|
+ # tenant_log(user.employee, BizLog.UPDATE, u'修改商品[%s],id=%d' % (instance.name, instance.id), request.data)
|
|
|
+
|
|
|
+ if file:
|
|
|
+ old_thumbnail = instance.thumbnail
|
|
|
+ thumbnail = Images.objects.employee_addnew(user.employee, Images.PACKAGE_THUMBNAIL_FILE, file)
|
|
|
+ instance.thumbnail = thumbnail
|
|
|
+ instance.save()
|
|
|
+ if old_thumbnail:
|
|
|
+ old_thumbnail.del_images()
|
|
|
+
|
|
|
+ return response_ok()
|
|
|
+ #
|
|
|
+ # @action(methods=['post'], detail=True)
|
|
|
+ # def upload_playbill(self, request, pk):
|
|
|
+ # if not self.request.user.has_perm('package.edit_package'):
|
|
|
+ # raise CustomError(u"您没有[商品管理-修改]权限,无法执行该操作,请联系管理员分配权限!")
|
|
|
+ # file = request.FILES.get('image', None)
|
|
|
+ # user = request.user
|
|
|
+ # instance = self.get_object()
|
|
|
+ # if instance.delete:
|
|
|
+ # raise CustomError(u'该商品已删除,禁止操作!')
|
|
|
+ # if instance.tenant != user.employee.tenant:
|
|
|
+ # raise CustomError(u'禁止跨租户操作!')
|
|
|
+ # if not file:
|
|
|
+ # raise CustomError(u'未发现上传文件!')
|
|
|
+ #
|
|
|
+ # with transaction.atomic():
|
|
|
+ # # tenant_log(user.employee, BizLog.UPDATE, u'商品[%s]上传海报,id=%d' % (instance.name, instance.id))
|
|
|
+ # old_playbill = instance.playbill
|
|
|
+ # playbill = Images.objects.employee_addnew(user.employee, Images.PACKAGE_PLAYBILL_FILE, file)
|
|
|
+ # instance.playbill = playbill
|
|
|
+ # instance.save()
|
|
|
+ # if old_playbill:
|
|
|
+ # old_playbill.del_images()
|
|
|
+ #
|
|
|
+ # return response_ok()
|
|
|
+ #
|
|
|
+ # @action(methods=['post'], detail=True)
|
|
|
+ # def upload_images(self, request, pk):
|
|
|
+ # if not self.request.user.has_perm('package.edit_package'):
|
|
|
+ # raise CustomError(u"您没有[商品管理-修改]权限,无法执行该操作,请联系管理员分配权限!")
|
|
|
+ # instance = self.get_object()
|
|
|
+ # images = request.FILES.get('images', None)
|
|
|
+ # user = request.user
|
|
|
+ #
|
|
|
+ # if instance.delete:
|
|
|
+ # raise CustomError(u'该商品已删除,禁止操作!')
|
|
|
+ # if instance.tenant != user.employee.tenant:
|
|
|
+ # raise CustomError(u'禁止跨租户操作!')
|
|
|
+ # if not images:
|
|
|
+ # raise CustomError(u'未找到上传文件!')
|
|
|
+ #
|
|
|
+ # with transaction.atomic():
|
|
|
+ # image = Images.objects.employee_addnew(user.employee, Images.PACKAGE_FILE, images)
|
|
|
+ # CommodityImage.objects.create(main=instance, img=image)
|
|
|
+ #
|
|
|
+ # # tenant_log(user.employee, BizLog.INSERT, u'商品[%s]上传图片儿,id=%d' % (instance.name, instance.id))
|
|
|
+ #
|
|
|
+ # return response_ok()
|
|
|
+
|
|
|
+
|
|
|
+class CommodityImageViewSet(CustomModelViewSet):
|
|
|
+ permission_classes = [IsEmployee, ]
|
|
|
+ queryset = CommodityImage.objects.filter()
|
|
|
+ serializer_class = CommodityImageSerializer
|
|
|
+
|
|
|
+ def filter_queryset(self, queryset):
|
|
|
+ f = CommodityImageFilter(self.request.GET, queryset=queryset)
|
|
|
+ return f.qs
|
|
|
+
|
|
|
+ def list(self, request, *args, **kwargs):
|
|
|
+ queryset = self.filter_queryset(self.get_queryset())
|
|
|
+ serializer = self.get_serializer(queryset, many=True)
|
|
|
+ return response_ok(serializer.data)
|
|
|
+
|
|
|
+ def destroy(self, request, *args, **kwargs):
|
|
|
+ with transaction.atomic():
|
|
|
+ instance = self.get_object()
|
|
|
+ if instance.main.tenant != request.user.employee.tenant:
|
|
|
+ raise CustomError(u'禁止跨租户操作!')
|
|
|
+
|
|
|
+ # tenant_log(self.request.user.employee, BizLog.DELETE, u'删除商品[%s]图片,id=%d' % (instance.main.name, instance.main.id))
|
|
|
+ img = instance.img
|
|
|
+ instance.delete()
|
|
|
+ img.del_images()
|
|
|
+ return response_ok()
|
|
|
+
|
|
|
+
|
|
|
+# class PackageSearch(APIView):
|
|
|
+# permission_classes = [IsEmployee, ]
|
|
|
+#
|
|
|
+# def get(self, request):
|
|
|
+# keyword = request.GET.get('keyword')
|
|
|
+# tenant = request.user.employee.tenant
|
|
|
+# rows = Package.objects.filter(delete=False, enabled=True, tenant=tenant)
|
|
|
+# if keyword:
|
|
|
+# rows = rows.filter(name__icontains=keyword)
|
|
|
+# serializer = PackageSerializer(rows, many=True)
|
|
|
+# return response_ok(serializer.data)
|