views.py 7.9 KB

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