views.py 4.0 KB

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