views.py 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. # coding=utf-8
  2. import json
  3. from django.db import transaction
  4. from rest_framework.views import APIView
  5. from rest_framework.decorators import action
  6. from utils import response_ok
  7. from utils.custom_modelviewset import CustomModelViewSet
  8. from utils.exceptions import CustomError
  9. from apps.foundation.models import BizLog, Option, Config
  10. from apps.account import tenant_log
  11. from .filters import OptionFilter, ConfigFilter
  12. from .serializers import OptionSerializer, ConfigSerializer
  13. class OptionDictView(APIView):
  14. def get(self, request):
  15. ret = {
  16. 'types':Option.TYPE_CHOICES,
  17. }
  18. return response_ok(ret)
  19. class OptionViewSet(CustomModelViewSet):
  20. queryset = Option.objects.filter(delete=False)
  21. serializer_class = OptionSerializer
  22. def filter_queryset(self, queryset):
  23. queryset = queryset.filter()
  24. f = OptionFilter(self.request.GET, queryset=queryset)
  25. return f.qs
  26. def perform_create(self, serializer):
  27. super(OptionViewSet, self).perform_create(serializer)
  28. instance = serializer.instance
  29. validated_data = serializer.validated_data
  30. tenant_log(self.request.user, BizLog.INSERT, u'添加系统选项[%s],id=%d' % (instance.name, instance.id),validated_data)
  31. def perform_update(self, serializer):
  32. super(OptionViewSet, self).perform_update(serializer)
  33. instance = serializer.instance
  34. validated_data = serializer.validated_data
  35. tenant_log(self.request.user, BizLog.UPDATE, u'修改系统选项[%s],id=%d' % (instance.name, instance.id), validated_data)
  36. def destroy(self, request, *args, **kwargs):
  37. with transaction.atomic():
  38. instance = self.get_object()
  39. instance.delete = True
  40. instance.save()
  41. tenant_log(self.request.user, BizLog.DELETE, u'删除系统选项[%s],id=%d' % (instance.name, instance.id))
  42. return response_ok()
  43. class OptionSearchSearch(APIView):
  44. def get(self, request):
  45. type = request.GET.get('type')
  46. types = request.GET.get('types')
  47. keyword = request.GET.get('keyword')
  48. rows = Option.objects.filter(delete=False, enable=True).order_by('type')
  49. if type:
  50. rows = rows.filter(type=int(type))
  51. if types:
  52. types = types.split(',')
  53. rows = rows.filter(type__in=types)
  54. if keyword:
  55. rows = rows.filter(name__icontains=keyword)
  56. data = []
  57. for row in rows:
  58. item ={
  59. 'type': row.type,
  60. 'value': row.id,
  61. 'id': row.id,
  62. 'name': row.name,
  63. 'notes': row.notes
  64. }
  65. data.append(item)
  66. return response_ok(data)
  67. class ConfigViewSet(CustomModelViewSet):
  68. queryset = Config.objects.filter()
  69. serializer_class = ConfigSerializer
  70. def filter_queryset(self, queryset):
  71. queryset = queryset.filter()
  72. f = ConfigFilter(self.request.GET, queryset=queryset)
  73. return f.qs
  74. #@action(methods=['post'], detail=True)
  75. def create(self, request):
  76. data = json.loads(request.POST.get('data'))
  77. with transaction.atomic():
  78. for item in data:
  79. config = Config.objects.filter(property=item['key']).first()
  80. if item['value']:
  81. if config:
  82. config.value = item['value']
  83. config.save()
  84. else:
  85. Config.objects.create(property=item['key'], value=item['value'])
  86. tenant_log(self.request.user, BizLog.INSERT, u'修改系统设置', data)
  87. return response_ok()
  88. class ConfigSearchSearch(APIView):
  89. def get(self, request):
  90. type = request.GET.get('type')
  91. value = Config.getConfigByText(type)
  92. return response_ok(value)