views.py 3.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  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. keyword = request.GET.get('keyword')
  47. rows = Option.objects.filter(delete=False, enable=True, tenant=request.user.employee.tenant)
  48. if type:
  49. rows = rows.filter(type=int(type))
  50. if keyword:
  51. rows = rows.filter(name__icontains=keyword)
  52. data = []
  53. for row in rows:
  54. item ={
  55. 'value': row.id,
  56. 'id': row.id,
  57. 'name': row.name,
  58. 'notes': row.notes
  59. }
  60. data.append(item)
  61. return response_ok(data)
  62. class ConfigViewSet(CustomModelViewSet):
  63. queryset = Config.objects.filter()
  64. serializer_class = ConfigSerializer
  65. def filter_queryset(self, queryset):
  66. queryset = queryset.filter()
  67. f = ConfigFilter(self.request.GET, queryset=queryset)
  68. return f.qs
  69. #@action(methods=['post'], detail=True)
  70. def create(self, request):
  71. data = json.loads(request.POST.get('data'))
  72. with transaction.atomic():
  73. for item in data:
  74. config = Config.objects.filter(property=item['key']).first()
  75. if item['value']:
  76. if config:
  77. config.value = item['value']
  78. config.save()
  79. else:
  80. config = Config.objects.create(property=item['key'], value=item['value'])
  81. tenant_log(self.request.user, BizLog.INSERT, u'修改系统设置', data)
  82. return response_ok()