views.py 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. from rest_framework import viewsets
  2. from utils.page import MyPageNumberPagination
  3. from utils.datasolve import sumOfList, transportation_calculate
  4. from utils.md5 import Md5
  5. from rest_framework.filters import OrderingFilter
  6. from django_filters.rest_framework import DjangoFilterBackend
  7. from rest_framework.response import Response
  8. from rest_framework.exceptions import APIException
  9. from django.utils import timezone
  10. from .models import BoundListModel, BoundDetailModel,BoundBatchModel
  11. # from .files import FileListRenderCN, FileDetailRenderCN
  12. from .serializers import BoundListGetSerializer,BoundListPostSerializer
  13. from .filter import BoundListFilter, BoundDetailFilter
  14. from warehouse.models import ListModel as warehouse
  15. from staff.models import ListModel as staff
  16. from rest_framework.permissions import AllowAny
  17. class BoundListViewSet(viewsets.ModelViewSet):
  18. """
  19. retrieve:
  20. Response a data list(get)
  21. list:
  22. Response a data list(all)
  23. create:
  24. Create a data line(post)
  25. delete:
  26. Delete a data line(delete)
  27. """
  28. # authentication_classes = [] # 禁用所有认证类
  29. # permission_classes = [AllowAny] # 允许任意访问
  30. pagination_class = MyPageNumberPagination
  31. filter_backends = [DjangoFilterBackend, OrderingFilter, ]
  32. ordering_fields = ['id', "create_time", "update_time", ]
  33. filter_class = BoundListFilter
  34. def get_project(self):
  35. try:
  36. id = self.kwargs.get('pk')
  37. return id
  38. except:
  39. return None
  40. def get_queryset(self):
  41. id = self.get_project()
  42. if self.request.user:
  43. if id is None:
  44. return BoundListModel.objects.filter( is_delete=False)
  45. else:
  46. return BoundListModel.objects.filter( id=id, is_delete=False)
  47. else:
  48. return BoundListModel.objects.none()
  49. def get_serializer_class(self):
  50. if self.action in ['list', 'destroy','retrieve']:
  51. return BoundListGetSerializer
  52. elif self.action in ['create', 'update']:
  53. return BoundListPostSerializer
  54. else:
  55. return self.http_method_not_allowed(request=self.request)
  56. def create(self, request, *args, **kwargs):
  57. data = self.request.data
  58. # if BoundListModel.objects.filter(code=data['code'], is_delete=False).exists():
  59. # raise APIException({"detail": "Data exists"})
  60. # else:
  61. data['openid'] = self.request.auth.openid
  62. data['bound_date'] =str(timezone.now().strftime('%Y-%m-%d'))
  63. order_day=str(timezone.now().strftime('%Y-%m-'))
  64. data['bound_month'] =str(timezone.now().strftime('%Y%m'))
  65. if data['bound_type'] == 'in':
  66. data['bound_status'] = '100'
  67. else:
  68. data['bound_status'] = '200'
  69. qs_set = BoundListModel.objects.filter(bound_month=data['bound_month'], bound_code_type=data['bound_code_type'], is_delete=False)
  70. print('qs_set是:', len(qs_set))
  71. if len(qs_set) > 0:
  72. bound_last_code = qs_set.order_by('-id').first().bound_code
  73. data['bound_code'] = data['bound_code_type'] +'-'+ order_day + str(int(bound_last_code.split('-')[-1])+1).zfill(4)
  74. else:
  75. data['bound_code'] = data['bound_code_type'] +'-'+ order_day + '0001'
  76. serializer = self.get_serializer(data=data)
  77. serializer.is_valid(raise_exception=True)
  78. serializer.save()
  79. headers = self.get_success_headers(serializer.data)
  80. return Response(serializer.data, status=200, headers=headers)
  81. def update(self, request, pk):
  82. qs = self.get_object()
  83. data = self.request.data
  84. serializer = self.get_serializer(qs, data=data)
  85. serializer.is_valid(raise_exception=True)
  86. serializer.save()
  87. headers = self.get_success_headers(serializer.data)
  88. return Response(serializer.data, status=200, headers=headers)
  89. def destroy(self, request, pk):
  90. qs = self.get_object()
  91. if qs.openid != self.request.auth.openid:
  92. raise APIException({"detail": "该入库非您所属,禁止删除,您可以进行编辑"})
  93. else:
  94. qs.is_delete = True
  95. qs.save()
  96. serializer = self.get_serializer(qs, many=False)
  97. headers = self.get_success_headers(serializer.data)
  98. return Response(serializer.data, status=200, headers=headers)