views.py 11 KB

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