views.py 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299
  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,BoundBatchGetSerializer,BoundBatchPostSerializer,BoundDetailGetSerializer,BoundDetailPostSerializer
  13. from .filter import BoundListFilter, BoundDetailFilter,BoundBatchFilter
  14. # 以后添加模块检验
  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 BoundListViewSet(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 = BoundListFilter
  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 BoundListModel.objects.filter( is_delete=False)
  46. else:
  47. return BoundListModel.objects.filter( id=id, is_delete=False)
  48. else:
  49. return BoundListModel.objects.none()
  50. def get_serializer_class(self):
  51. if self.action in ['list', 'destroy','retrieve']:
  52. return BoundListGetSerializer
  53. elif self.action in ['create', 'update']:
  54. return BoundListPostSerializer
  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 BoundListModel.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. data['bound_date'] =str(timezone.now().strftime('%Y-%m-%d'))
  64. order_day=str(timezone.now().strftime('%Y-%m-'))
  65. data['bound_month'] =str(timezone.now().strftime('%Y%m'))
  66. if data['bound_type'] == 'in':
  67. data['bound_status'] = '100'
  68. else:
  69. data['bound_status'] = '200'
  70. qs_set = BoundListModel.objects.filter(bound_month=data['bound_month'], bound_code_type=data['bound_code_type'], is_delete=False)
  71. print('qs_set是:', len(qs_set))
  72. if len(qs_set) > 0:
  73. bound_last_code = qs_set.order_by('-id').first().bound_code
  74. data['bound_code'] = data['bound_code_type'] +'-'+ order_day + str(int(bound_last_code.split('-')[-1])+1).zfill(4)
  75. else:
  76. data['bound_code'] = data['bound_code_type'] +'-'+ order_day + '0001'
  77. serializer = self.get_serializer(data=data)
  78. serializer.is_valid(raise_exception=True)
  79. serializer.save()
  80. headers = self.get_success_headers(serializer.data)
  81. return Response(serializer.data, status=200, headers=headers)
  82. def update(self, request, pk):
  83. qs = self.get_object()
  84. data = self.request.data
  85. serializer = self.get_serializer(qs, data=data)
  86. serializer.is_valid(raise_exception=True)
  87. serializer.save()
  88. headers = self.get_success_headers(serializer.data)
  89. return Response(serializer.data, status=200, headers=headers)
  90. def destroy(self, request, pk):
  91. qs = self.get_object()
  92. if qs.openid != self.request.auth.openid:
  93. raise APIException({"detail": "该入库非您所属,禁止删除,您可以进行编辑"})
  94. else:
  95. qs.is_delete = True
  96. qs.bound_code =qs.bound_code+'-delete'+str(timezone.now().strftime('%Y%m%d%H%M%S'))
  97. qs.save()
  98. serializer = self.get_serializer(qs, many=False)
  99. headers = self.get_success_headers(serializer.data)
  100. return Response(serializer.data, status=200, headers=headers)
  101. class BoundBatchViewSet(viewsets.ModelViewSet):
  102. """
  103. retrieve:
  104. Response a data list(get)
  105. list:
  106. Response a data list(all)
  107. create:
  108. Create a data line(post)
  109. delete:
  110. Delete a data line(delete)
  111. """
  112. # authentication_classes = [] # 禁用所有认证类
  113. # permission_classes = [AllowAny] # 允许任意访问
  114. pagination_class = MyPageNumberPagination
  115. filter_backends = [DjangoFilterBackend, OrderingFilter, ]
  116. ordering_fields = ['id', "create_time", "update_time", ]
  117. filter_class = BoundBatchFilter
  118. def get_project(self):
  119. try:
  120. id = self.kwargs.get('pk')
  121. return id
  122. except:
  123. return None
  124. def get_queryset(self):
  125. id = self.get_project()
  126. if self.request.user:
  127. if id is None:
  128. return BoundBatchModel.objects.filter( is_delete=False)
  129. else:
  130. return BoundBatchModel.objects.filter( id=id, is_delete=False)
  131. else:
  132. return BoundBatchModel.objects.none()
  133. def get_serializer_class(self):
  134. if self.action in ['list', 'destroy','retrieve']:
  135. return BoundBatchGetSerializer
  136. elif self.action in ['create', 'update']:
  137. return BoundBatchPostSerializer
  138. else:
  139. return self.http_method_not_allowed(request=self.request)
  140. def create(self, request, *args, **kwargs):
  141. data = self.request.data
  142. data['openid'] = self.request.auth.openid
  143. data['goods_total_weight'] = data['goods_weight']*data['goods_qty']
  144. order_day=str(timezone.now().strftime('-%Y%m'))
  145. order_month=str(timezone.now().strftime('%Y%m'))
  146. data['bound_month'] =str(timezone.now().strftime('%Y%m'))
  147. print(data['order'])
  148. if data['order'] == 'true':
  149. qs_set = BoundBatchModel.objects.filter( goods_code=data['goods_code'], bound_month=order_month, is_delete=False)
  150. print('qs_set是:', len(qs_set))
  151. if len(qs_set) > 0:
  152. bound_last_code = qs_set.order_by('-id').first().bound_number
  153. data['bound_batch_order'] = int(bound_last_code.split('-')[-1])+1
  154. data['bound_number'] = data['goods_code'] + '-' + str(int(bound_last_code.split('-')[-1])+1)
  155. else:
  156. data['bound_batch_order'] = 1
  157. data['bound_number'] = data['goods_code'] + order_day + '01'
  158. serializer = self.get_serializer(data=data)
  159. serializer.is_valid(raise_exception=True)
  160. serializer.save()
  161. headers = self.get_success_headers(serializer.data)
  162. return Response(serializer.data, status=200, headers=headers)
  163. def update(self, request, pk):
  164. qs = self.get_object()
  165. data = self.request.data
  166. serializer = self.get_serializer(qs, data=data)
  167. serializer.is_valid(raise_exception=True)
  168. serializer.save()
  169. headers = self.get_success_headers(serializer.data)
  170. return Response(serializer.data, status=200, headers=headers)
  171. def destroy(self, request, pk):
  172. qs = self.get_object()
  173. if qs.openid != self.request.auth.openid:
  174. raise APIException({"detail": "该入库非您所属,禁止删除,您可以进行编辑"})
  175. else:
  176. qs.is_delete = True
  177. qs.save()
  178. serializer = self.get_serializer(qs, many=False)
  179. headers = self.get_success_headers(serializer.data)
  180. return Response(serializer.data, status=200, headers=headers)
  181. class BoundDetailViewSet(viewsets.ModelViewSet):
  182. """
  183. retrieve:
  184. Response a data list(get)
  185. list:
  186. Response a data list(all)
  187. create:
  188. Create a data line(post)
  189. delete:
  190. Delete a data line(delete)
  191. """
  192. # authentication_classes = [] # 禁用所有认证类
  193. # permission_classes = [AllowAny] # 允许任意访问
  194. pagination_class = MyPageNumberPagination
  195. filter_backends = [DjangoFilterBackend, OrderingFilter, ]
  196. ordering_fields = ['id', "create_time", "update_time", ]
  197. filter_class = BoundDetailFilter
  198. def get_project(self):
  199. try:
  200. id = self.kwargs.get('pk')
  201. return id
  202. except:
  203. return None
  204. def get_queryset(self):
  205. id = self.get_project()
  206. if self.request.user:
  207. if id is None:
  208. return BoundDetailModel.objects.filter( is_delete=False)
  209. else:
  210. return BoundDetailModel.objects.filter( id=id, is_delete=False)
  211. else:
  212. return BoundDetailModel.objects.none()
  213. def get_serializer_class(self):
  214. if self.action in ['list', 'destroy','retrieve']:
  215. return BoundDetailGetSerializer
  216. elif self.action in ['create', 'update']:
  217. return BoundDetailPostSerializer
  218. else:
  219. return self.http_method_not_allowed(request=self.request)
  220. def create(self, request, *args, **kwargs):
  221. data = self.request.data
  222. data['openid'] = self.request.auth.openid
  223. data.setdefault('is_delete', False)
  224. # 验证并保存数据
  225. data['detail_code'] = f"DC-{data['bound_list']:02}{data['bound_batch']:02}"
  226. print(data['detail_code'])
  227. if BoundDetailModel.objects.filter(detail_code=data['detail_code'], is_delete=False).exists():
  228. raise APIException({"detail": "Data exists"})
  229. else:
  230. serializer = self.get_serializer(data=data)
  231. serializer.is_valid(raise_exception=True)
  232. serializer.save()
  233. # 返回响应
  234. headers = self.get_success_headers(serializer.data)
  235. return Response(serializer.data, status=200, headers=headers)
  236. def update(self, request, pk):
  237. qs = self.get_object()
  238. data = self.request.data
  239. serializer = self.get_serializer(qs, data=data)
  240. serializer.is_valid(raise_exception=True)
  241. serializer.save()
  242. headers = self.get_success_headers(serializer.data)
  243. return Response(serializer.data, status=200, headers=headers)
  244. def destroy(self, request, pk):
  245. qs = self.get_object()
  246. if qs.openid != self.request.auth.openid:
  247. raise APIException({"detail": "该入库非您所属,禁止删除,您可以进行编辑"})
  248. else:
  249. qs.is_delete = True
  250. qs.save()
  251. serializer = self.get_serializer(qs, many=False)
  252. headers = self.get_success_headers(serializer.data)
  253. return Response(serializer.data, status=200, headers=headers)