views.py 11 KB

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