views.py 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. # coding=utf-8
  2. import json
  3. from django.db import transaction
  4. from django.conf import settings
  5. from rest_framework.decorators import action
  6. from utils.custom_modelviewset import CustomModelViewSet
  7. from utils import response_ok, response_error
  8. from utils.exceptions import CustomError
  9. from utils.permission import IsEmployee
  10. from apps.config.models import Config
  11. from apps.config.serializers import ConfigSerializer
  12. from apps.config.filters import ConfigFilter
  13. from apps.commodity.models import Commodity
  14. from apps.log.models import BizLog
  15. from apps.base import Formater
  16. class ConfigViewSet(CustomModelViewSet):
  17. permission_classes = [IsEmployee, ]
  18. queryset = Config.objects.filter()
  19. serializer_class = ConfigSerializer
  20. def list(self, request, *args, **kwargs):
  21. queryset = self.filter_queryset(self.get_queryset())
  22. serializer = self.get_serializer(queryset, many=True)
  23. return response_ok(serializer.data)
  24. def create(self, request, *args,**kwargs):
  25. data = json.loads(request.POST.get('data'))
  26. keys = [
  27. 'point_rule',
  28. 'first_lv1', 'first_lv2', 'first_lv3', 'first_lv4', 'first_lv5',
  29. 'again_lv1', 'again_lv2', 'again_lv3', 'again_lv4', 'again_lv5',
  30. ]
  31. with transaction.atomic():
  32. for item in data:
  33. config = Config.objects.filter(property=item['key']).first()
  34. if item['value']:
  35. if item['key'] not in keys:
  36. raise CustomError(u'综合设置属性[%s]不存在' % item['key'])
  37. else:
  38. item['value'] = item['value'].strip()
  39. if config:
  40. config.value = item['value']
  41. config.save()
  42. else:
  43. Config.objects.create(property=item['key'], value=item['value'])
  44. BizLog.objects.addnew(self.request.user, BizLog.INSERT, u'修改系统配置', data)
  45. return response_ok()
  46. @action(methods=['post'], detail=False)
  47. def set_commodity(self, request):
  48. '''
  49. 存在commodity_id 查询相应的商品并保存设置
  50. 不存在commodity_id 将原来的设置清空
  51. :param request:
  52. :return:
  53. '''
  54. commodity_id = request.POST.get('commodity_id', None)
  55. commodity = None
  56. if commodity_id:
  57. commodity = Commodity.objects.filter(id=commodity_id).first()
  58. if commodity and commodity.delete:
  59. raise CustomError(u'该商品已删除!')
  60. if commodity and commodity.status == settings.OFFLINE:
  61. raise CustomError(u'该商品已下架!')
  62. with transaction.atomic():
  63. config = Config.objects.filter(property=Config.KEY_DISTRIBUTOR_COMMODITY).first()
  64. if config:
  65. config.value = commodity_id
  66. config.save()
  67. else:
  68. Config.objects.create(property=Config.KEY_DISTRIBUTOR_COMMODITY, value=commodity_id)
  69. return response_ok()
  70. @action(methods=['get'], detail=False)
  71. def get_commodity(self, request):
  72. '''
  73. 返回设置商品信息 如果该商品在销售过程中 下架或者删除 设置商品同时失效
  74. :param request:
  75. :return:
  76. '''
  77. commodity_id = Config.get_commodity()
  78. data = {}
  79. if commodity_id:
  80. commodity = Commodity.objects.filter(id=commodity_id, delete=False, status=settings.ONLINE).first()
  81. if not commodity:
  82. return response_ok(data)
  83. data['name'] = commodity.name or ''
  84. data['price'] = Formater.formatValueShow(commodity.price)
  85. data['vip_price'] = Formater.formatValueShow(commodity.vip_price)
  86. data['point_price'] = commodity.point_price or '0.00'
  87. data['show_image'] = commodity.show_image and commodity.show_image.get_path() or ''
  88. return response_ok(data)