views.py 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. # coding=utf-8
  2. from django.db import transaction
  3. from rest_framework.decorators import action
  4. from rest_framework.views import APIView
  5. from utils import response_ok
  6. from utils.permission import IsEmployee
  7. from utils.exceptions import CustomError
  8. from utils.custom_modelviewset import CustomModelViewSet
  9. from apps.log.models import BizLog
  10. from apps.images.models import Images
  11. from apps.commodity.models import Commodity, CommodityImage
  12. from apps.commodity.filters import CommodityFilter, CommodityImageFilter
  13. from .serializers import CommoditySerializer, CommodityImageSerializer
  14. from apps.option.models import Option
  15. from apps.base import Formater
  16. class CommodityDict(APIView):
  17. permission_classes = [IsEmployee, ]
  18. def get(self, request):
  19. rows = Option.objects.filter(type=Option.COMMODITY_CATEGORY, enable=True, delete=False).order_by('sort').values('id', 'name')
  20. data = [{'value': row['id'], 'name': row['name']} for row in rows]
  21. ret = {
  22. 'category': data
  23. }
  24. return response_ok(ret)
  25. class CommodityViewSet(CustomModelViewSet):
  26. permission_classes = [IsEmployee, ]
  27. queryset = Commodity.objects.filter(delete=False)
  28. serializer_class = CommoditySerializer
  29. def filter_queryset(self, queryset):
  30. queryset = queryset.filter()
  31. f = CommodityFilter(self.request.GET, queryset=queryset)
  32. return f.qs
  33. def perform_create(self, serializer):
  34. super(CommodityViewSet, self).perform_create(serializer)
  35. instance = serializer.instance
  36. validated_data = serializer.validated_data
  37. BizLog.objects.addnew(self.request.user, BizLog.INSERT, u'添加商品[%s],id=%d' % (instance.name, instance.id), validated_data)
  38. def perform_update(self, serializer):
  39. super(CommodityViewSet, self).perform_update(serializer)
  40. instance = serializer.instance
  41. validated_data = serializer.validated_data
  42. BizLog.objects.addnew(self.request.user, BizLog.UPDATE, u'修改商品[%s], id=%d' % (instance.name, instance.id), validated_data)
  43. def destroy(self, request, *args, **kwargs):
  44. with transaction.atomic():
  45. instance = self.get_object()
  46. instance.delete = True
  47. instance.save()
  48. BizLog.objects.addnew(self.request.user, BizLog.DELETE, u'删除商品[%s],id=%d' % (instance.name, instance.id))
  49. return response_ok()
  50. @action(methods=['post'], detail=True)
  51. def update_image(self, request, pk):
  52. file = request.FILES.get('image', None)
  53. user = request.user
  54. instance = self.get_object()
  55. if instance.delete:
  56. raise CustomError(u'该商品已删除,禁止操作!')
  57. with transaction.atomic():
  58. serializer = self.get_serializer(instance, data=request.data)
  59. serializer.is_valid(raise_exception=True)
  60. self.perform_update(serializer)
  61. # tenant_log(user.employee, BizLog.UPDATE, u'修改商品[%s],id=%d' % (instance.name, instance.id), request.data)
  62. if file:
  63. old_thumbnail = instance.thumbnail
  64. thumbnail = Images.objects.employee_addnew(user.employee, Images.PACKAGE_THUMBNAIL_FILE, file)
  65. instance.thumbnail = thumbnail
  66. instance.save()
  67. if old_thumbnail:
  68. old_thumbnail.del_images()
  69. return response_ok()
  70. #
  71. # @action(methods=['post'], detail=True)
  72. # def upload_playbill(self, request, pk):
  73. # if not self.request.user.has_perm('package.edit_package'):
  74. # raise CustomError(u"您没有[商品管理-修改]权限,无法执行该操作,请联系管理员分配权限!")
  75. # file = request.FILES.get('image', None)
  76. # user = request.user
  77. # instance = self.get_object()
  78. # if instance.delete:
  79. # raise CustomError(u'该商品已删除,禁止操作!')
  80. # if instance.tenant != user.employee.tenant:
  81. # raise CustomError(u'禁止跨租户操作!')
  82. # if not file:
  83. # raise CustomError(u'未发现上传文件!')
  84. #
  85. # with transaction.atomic():
  86. # # tenant_log(user.employee, BizLog.UPDATE, u'商品[%s]上传海报,id=%d' % (instance.name, instance.id))
  87. # old_playbill = instance.playbill
  88. # playbill = Images.objects.employee_addnew(user.employee, Images.PACKAGE_PLAYBILL_FILE, file)
  89. # instance.playbill = playbill
  90. # instance.save()
  91. # if old_playbill:
  92. # old_playbill.del_images()
  93. #
  94. # return response_ok()
  95. #
  96. # @action(methods=['post'], detail=True)
  97. # def upload_images(self, request, pk):
  98. # if not self.request.user.has_perm('package.edit_package'):
  99. # raise CustomError(u"您没有[商品管理-修改]权限,无法执行该操作,请联系管理员分配权限!")
  100. # instance = self.get_object()
  101. # images = request.FILES.get('images', None)
  102. # user = request.user
  103. #
  104. # if instance.delete:
  105. # raise CustomError(u'该商品已删除,禁止操作!')
  106. # if instance.tenant != user.employee.tenant:
  107. # raise CustomError(u'禁止跨租户操作!')
  108. # if not images:
  109. # raise CustomError(u'未找到上传文件!')
  110. #
  111. # with transaction.atomic():
  112. # image = Images.objects.employee_addnew(user.employee, Images.PACKAGE_FILE, images)
  113. # CommodityImage.objects.create(main=instance, img=image)
  114. #
  115. # # tenant_log(user.employee, BizLog.INSERT, u'商品[%s]上传图片儿,id=%d' % (instance.name, instance.id))
  116. #
  117. # return response_ok()
  118. class CommodityImageViewSet(CustomModelViewSet):
  119. permission_classes = [IsEmployee, ]
  120. queryset = CommodityImage.objects.filter()
  121. serializer_class = CommodityImageSerializer
  122. def filter_queryset(self, queryset):
  123. f = CommodityImageFilter(self.request.GET, queryset=queryset)
  124. return f.qs
  125. def list(self, request, *args, **kwargs):
  126. queryset = self.filter_queryset(self.get_queryset())
  127. serializer = self.get_serializer(queryset, many=True)
  128. return response_ok(serializer.data)
  129. def destroy(self, request, *args, **kwargs):
  130. with transaction.atomic():
  131. instance = self.get_object()
  132. if instance.main.tenant != request.user.employee.tenant:
  133. raise CustomError(u'禁止跨租户操作!')
  134. # tenant_log(self.request.user.employee, BizLog.DELETE, u'删除商品[%s]图片,id=%d' % (instance.main.name, instance.main.id))
  135. img = instance.img
  136. instance.delete()
  137. img.del_images()
  138. return response_ok()
  139. # class PackageSearch(APIView):
  140. # permission_classes = [IsEmployee, ]
  141. #
  142. # def get(self, request):
  143. # keyword = request.GET.get('keyword')
  144. # tenant = request.user.employee.tenant
  145. # rows = Package.objects.filter(delete=False, enabled=True, tenant=tenant)
  146. # if keyword:
  147. # rows = rows.filter(name__icontains=keyword)
  148. # serializer = PackageSerializer(rows, many=True)
  149. # return response_ok(serializer.data)