views.py 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  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 AsnListModel, AsnDetailModel
  11. from .filter import AsnListFilter, AsnDetailFilter
  12. from .serializers import ASNListGetSerializer, ASNListPostSerializer, ASNDetailGetSerializer,ASNDetailPostSerializer
  13. from .files import FileListRenderCN, FileDetailRenderCN
  14. from warehouse.models import ListModel as warehouse
  15. from warehouse.models import ListModel as warehouse
  16. from staff.models import ListModel as staff
  17. from rest_framework.permissions import AllowAny
  18. class AsnListViewSet(viewsets.ModelViewSet):
  19. """
  20. retrieve:
  21. Response a data list(get)
  22. list:
  23. Response a data list(all)
  24. create:
  25. Create a data line(post)
  26. delete:
  27. Delete a data line(delete)
  28. """
  29. authentication_classes = [] # 禁用所有认证类
  30. permission_classes = [AllowAny] # 允许任意访问
  31. pagination_class = MyPageNumberPagination
  32. filter_backends = [DjangoFilterBackend, OrderingFilter, ]
  33. ordering_fields = ['id', "create_time", "update_time", ]
  34. filter_class = AsnListFilter
  35. def get_project(self):
  36. try:
  37. id = self.kwargs.get('pk')
  38. return id
  39. except:
  40. return None
  41. def get_queryset(self):
  42. id = self.get_project()
  43. if self.request.user:
  44. if id is None:
  45. return AsnListModel.objects.filter( is_delete=False)
  46. else:
  47. return AsnListModel.objects.filter( id=id, is_delete=False)
  48. else:
  49. return AsnListModel.objects.none()
  50. def get_serializer_class(self):
  51. if self.action in ['list', 'destroy']:
  52. return ASNListGetSerializer
  53. elif self.action in ['create', 'update']:
  54. return ASNListPostSerializer
  55. else:
  56. return self.http_method_not_allowed(request=self.request)
  57. def create(self, request, *args, **kwargs):
  58. data = self.request.data
  59. if AsnListModel.objects.filter(code=data['code'], is_delete=False).exists():
  60. raise APIException({"detail": "Data exists"})
  61. else:
  62. data['openid'] = self.request.auth.openid
  63. qs_set = AsnListModel.objects.filter(openid=self.request.auth.openid,asn_type=data['asn_type'], is_delete=False)
  64. order_day =str(timezone.now().strftime('%Y%m%d'))
  65. if len(qs_set) > 0:
  66. asn_last_code = qs_set.order_by('-id').first().asn_code
  67. if str(asn_last_code[3:11]) == order_day:
  68. order_create_no = f"{int(asn_last_code[11:]) + 1:03d}"
  69. data['asn_code'] = data['asn_type'] + order_day + order_create_no
  70. else:
  71. data['asn_code'] = data['asn_type'] + order_day + '001'
  72. else:
  73. data['asn_code'] = data['asn_type'] + order_day + '001'
  74. serializer = self.get_serializer(data=data)
  75. serializer.is_valid(raise_exception=True)
  76. serializer.save()
  77. AsnDetailModel.objects.create(
  78. openid=self.request.auth.openid,
  79. asn_code=serializer.data['asn_code'],
  80. asn_type=serializer.data['asn_type'],
  81. asn_status=serializer.data['asn_status'],
  82. goods_code=serializer.data['goods_code'],
  83. goods_desc=serializer.data['goods_desc'],
  84. goods_qty=serializer.data['goods_qty'],
  85. goods_weight=serializer.data['goods_weight'],
  86. creater = serializer.data['creater'],
  87. )
  88. headers = self.get_success_headers(serializer.data)
  89. return Response(serializer.data, status=200, headers=headers)
  90. def update(self, request, pk):
  91. qs = self.get_object()
  92. data = self.request.data
  93. serializer = self.get_serializer(qs, data=data)
  94. serializer.is_valid(raise_exception=True)
  95. serializer.save()
  96. qs_detail = AsnDetailModel.objects.filter(openid=self.request.auth.openid, asn_code=data['asn_code'], is_delete=False)
  97. serializer_detail = ASNDetailPostSerializer(qs_detail.first(), data=data)
  98. serializer_detail.is_valid(raise_exception=True)
  99. serializer_detail.save()
  100. headers = self.get_success_headers(serializer.data)
  101. return Response(serializer.data, status=200, headers=headers)
  102. def destroy(self, request, pk):
  103. qs = self.get_object()
  104. if qs.openid != self.request.auth.openid:
  105. raise APIException({"detail": "该入库非您所属,禁止删除,您可以进行编辑"})
  106. else:
  107. qs.is_delete = True
  108. asn_detail_list = AsnDetailModel.objects.filter(openid=self.request.auth.openid, asn_code=qs.asn_code, is_delete=False)
  109. asn_detail_list.update(is_delete=True)
  110. qs.save()
  111. serializer = self.get_serializer(qs, many=False)
  112. headers = self.get_success_headers(serializer.data)
  113. return Response(serializer.data, status=200, headers=headers)
  114. class AsnDetailViewSet(viewsets.ModelViewSet):
  115. """
  116. retrieve:
  117. Response a data list(get)
  118. list:
  119. Response a data list(all)
  120. create:
  121. Create a data line(post)
  122. update:
  123. Update a data(put:update)
  124. """
  125. pagination_class = MyPageNumberPagination
  126. filter_backends = [DjangoFilterBackend, OrderingFilter, ]
  127. ordering_fields = ['id', "create_time", "update_time", ]
  128. filter_class = AsnDetailFilter
  129. def get_project(self):
  130. try:
  131. id = self.kwargs.get('pk')
  132. return id
  133. except:
  134. return None
  135. def get_queryset(self):
  136. id = self.get_project()
  137. if self.request.user:
  138. if id is None:
  139. return AsnDetailModel.objects.filter( is_delete=False)
  140. else:
  141. return AsnDetailModel.objects.filter( id=id, is_delete=False)
  142. else:
  143. return AsnDetailModel.objects.none()
  144. def get_serializer_class(self):
  145. if self.action in ['list', 'destroy']:
  146. return ASNDetailGetSerializer
  147. elif self.action in ['update']:
  148. return ASNDetailPostSerializer
  149. else:
  150. return self.http_method_not_allowed(request=self.request)
  151. def update(self, request, pk):
  152. qs = self.get_object()
  153. data = self.request.data
  154. serializer = self.get_serializer(qs, data=data)
  155. serializer.is_valid(raise_exception=True)
  156. serializer.save()
  157. qs_detail = AsnDetailModel.objects.filter(openid=self.request.auth.openid, asn_code=data['asn_code'], is_delete=False)
  158. serializer_detail = ASNDetailPostSerializer(qs_detail.first(), data=data)
  159. serializer_detail.is_valid(raise_exception=True)
  160. serializer_detail.save()
  161. headers = self.get_success_headers(serializer.data)
  162. return Response(serializer.data, status=200, headers=headers)
  163. def destroy(self, request, pk):
  164. qs = self.get_object()
  165. if qs.openid != self.request.auth.openid:
  166. raise APIException({"detail": "该入库非您所属,禁止删除,您可以进行编辑"})
  167. else:
  168. qs.is_delete = True
  169. asn_detail_list = AsnDetailModel.objects.filter(openid=self.request.auth.openid, asn_code=qs.asn_code, is_delete=False)
  170. asn_detail_list.update(is_delete=True)
  171. qs.save()
  172. serializer = self.get_serializer(qs, many=False)
  173. headers = self.get_success_headers(serializer.data)
  174. return Response(serializer.data, status=200, headers=headers)