import threading from datetime import datetime from django.db.models import Sum, Q from django.views.decorators.csrf import csrf_exempt from oauth2_provider.contrib.rest_framework import TokenHasReadWriteScope from rest_framework import viewsets from rest_framework import status from rest_framework.decorators import api_view, permission_classes from rest_framework.permissions import AllowAny from rest_framework.response import Response from LiveStock.Jahad.filterset import LiveStockAllocationsFilterSet, CooperativeProductsShareFilterSet from LiveStock.Jahad.helpers import jahad_warehousing, union_warehousing, cooperative_warehousing from LiveStock.Jahad.serializers import LiveStockProvinceJahadSerializer, LiveStockRolseProductSerializer, \ LiveStockAllocationsSerializer, LiveStockProductSerializer, CooperativeProductsShareSerializer from LiveStock.Rancher.helpers import update_quota_rancher_threading from LiveStock.Rancher.serializers import RancherSerializer from LiveStock.Union.serializers import UnionSerializer from LiveStock.helpers import CustomPagination, build_query from LiveStock.models import LiveStockProvinceJahad, LiveStockRolseProduct, LiveStockAllocations, Union, Cooperative, \ Rancher, LiveStockProduct, CooperativeProductsShare from authentication.models import SystemUserProfile class LiveStockProvinceJahadViewSet(viewsets.ModelViewSet): queryset = LiveStockProvinceJahad.objects.all() permission_classes = [TokenHasReadWriteScope] serializer_class = LiveStockProvinceJahadSerializer def retrieve(self, request, pk=None, *args, **kwargs): if 'profile' in request.GET: user = SystemUserProfile.objects.get(user=request.user, trash=False) jahad = user.jahad_user.all() serializer = self.serializer_class(jahad[0]) return Response(serializer.data, status=status.HTTP_200_OK) class LiveStockRolseProductViewset(viewsets.ModelViewSet): queryset = LiveStockRolseProduct.objects.all() permission_classes = [TokenHasReadWriteScope] serializer_class = LiveStockRolseProductSerializer def list(self, request, *args, **kwargs): user = SystemUserProfile.objects.get(user=request.user, trash=False) products = { "bran":"سبوس", "barley":"جو", "soy":"سویا", "corn":"ذرت", "sheep_concentrate":"کنسانتره گوسفندی", "high_cow_concentrate":"کنسانتره گاو شیری پرتولید", "medium_cow_concentrate":"کنسانتره گاو شیری متوسط", "fattening_calf_concentrate":"کنسانتره گوساله پرواری", } name =products[request.GET.get('name')] product = LiveStockProduct.objects.filter(trash=False, name=name).first() if request.GET['role'] == 'LiveStockProvinceJahad': products = LiveStockRolseProduct.objects.filter(jahad__isnull=False, trash=False , parent_product=product).first() elif request.GET['role'] == 'Union': products = LiveStockRolseProduct.objects.filter(union__user=user, trash=False, parent_product=product).first() else: products = LiveStockRolseProduct.objects.filter(cooperative__user=user, trash=False, parent_product=product).first() serializer = self.serializer_class(products) return Response(serializer.data, status=status.HTTP_200_OK) class LiveStockAllocationsViewSet(viewsets.ModelViewSet): queryset = LiveStockAllocations.objects.all() permission_classes = [TokenHasReadWriteScope] serializer_class = LiveStockAllocationsSerializer pagination_class = CustomPagination filterset_class = LiveStockAllocationsFilterSet def create(self, request, *args, **kwargs): user = SystemUserProfile.objects.get(user=request.user, trash=False) product = LiveStockRolseProduct.objects.get(key=request.data['product_key']) allocator = request.data['allocator'] receiver = request.data['receiver'] request.data.pop('allocator') request.data.pop('receiver') request.data.pop('product_key') if allocator == 'LiveStockProvinceJahad': jahad = LiveStockProvinceJahad.objects.get(user=user, trash=False) jahad_roles_product = LiveStockRolseProduct.objects.filter(jahad__isnull=False,parent_product__name=product.parent_product.name,trash=False).first() if receiver != 'LiveStockProvinceJahad': if request.data['weight'] > jahad_roles_product.total_remain_weight: return Response({"result": "مقدار وارد شده بیشتر از باقی مانده انبار است !"}, status=status.HTTP_403_FORBIDDEN) elif allocator == 'Cooperative': cooperative = Cooperative.objects.get(user=user, trash=False) cooperative_roles_product = LiveStockRolseProduct.objects.get(cooperative=cooperative,parent_product__name=product.parent_product.name, trash=False) if receiver != 'Cooperative': if request.data[ 'weight'] + cooperative_roles_product.total_remain_weight > cooperative_roles_product.total_receipt_weight: return Response({"result": "مقدار وارد شده بیشتر از سهمیه دریافتی است !"}, status=status.HTTP_403_FORBIDDEN) else: union = Union.objects.get(user=user, trash=False) union_roles_product = LiveStockRolseProduct.objects.filter(union__isnull=False,parent_product__name=product.parent_product.name, trash=False).first() if request.data['weight'] > union_roles_product.total_remain_weight: return Response({"result": "مقدار وارد شده بیشتر از باقی مانده انبار است !"}, status=status.HTTP_403_FORBIDDEN) if receiver == 'LiveStockProvinceJahad': pass elif receiver == 'Union': union = Union.objects.get(key=request.data['buyer_key'], trash=False) request.data.pop('buyer_key') else: if allocator == 'Cooperative': pass else: cooperative = Cooperative.objects.get(key=request.data['buyer_key'], trash=False) request.data.pop('buyer_key') serializer = self.serializer_class(data=request.data) if serializer.is_valid(): allocation = serializer.create(validated_data=request.data) allocation.product = product if allocator == 'LiveStockProvinceJahad': allocation.jahad = jahad allocation.allocate_from = "LiveStockProvinceJahad" elif allocator == 'Cooperative': allocation.cooperative = cooperative allocation.allocate_from = "Cooperative" else: allocation.union = union allocation.allocate_from = "Union" if receiver == 'LiveStockProvinceJahad': allocation.allocate_to = "LiveStockProvinceJahad" allocation.charge = True allocation.state = 'accepted' elif receiver == 'Union': allocation.union = union allocation.allocate_to = "Union" else: allocation.cooperative = cooperative allocation.allocate_to = "Cooperative" if allocator == 'Cooperative': allocation.charge = True allocation.save() if allocator == 'LiveStockProvinceJahad': jahad_warehousing(product) elif allocator == 'Cooperative': pass else: union_warehousing(product) if receiver == 'Union': reciver_product = LiveStockRolseProduct.objects.get(parent_product=product.parent_product, union=union) union_warehousing(reciver_product) elif receiver == 'Cooperative': reciver_product = LiveStockRolseProduct.objects.get(parent_product=product.parent_product, cooperative=cooperative) cooperative_warehousing(reciver_product) else: pass return Response({"result": "با موفقیت ثبت شد!"}, status=status.HTTP_201_CREATED) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) def update(self, request, pk=None, *args, **kwargs): allocation = LiveStockAllocations.objects.get(key=request.data['allocation_key'], trash=False) request.data.pop('allocation_key') if allocation.charge == True: if allocation.allocate_from == 'LiveStockProvinceJahad': if request.data['weight'] < allocation.weight: allocations = LiveStockAllocations.objects.filter(jahad=allocation.jahad,product=allocation.product, trash=False) charge = (allocations.filter(charge=True).exclude(id=allocation.id).aggregate(total=Sum('weight'))[ 'total'] or 0) + request.data['weight'] jahad_alocations = allocations.filter(charge=False).aggregate(total=Sum('weight'))['total'] or 0 if charge < jahad_alocations: return Response( {"result": "به علت عدم همخوانی موجودی و تخصیصات امکان ویرایش با این وزن وجود ندارد!"}, status=status.HTTP_403_FORBIDDEN) else: allocations = LiveStockAllocations.objects.filter(cooperative=allocation.cooperative,product=allocation.product, trash=False) charge = (allocations.filter(charge=True).exclude(id=allocation.id).aggregate(total=Sum('weight'))[ 'total'] or 0) + request.data['weight'] if request.data['weight'] < allocation.weight: if charge < allocation.product.total_allocated_weight: return Response( {"result": "به علت عدم همخوانی موجودی و فروش امکان ویرایش با این وزن وجود ندارد!"}, status=status.HTTP_403_FORBIDDEN) elif request.data['weight'] > allocation.weight: if charge > allocation.product.total_receipt_weight: return Response( { "result": "به علت عدم همخوانی سهمیه دریافتی و موجودی انبار امکان ویرایش با این وزن وجود ندارد!"}, status=status.HTTP_403_FORBIDDEN) else: if request.data['weight'] > allocation.weight: if allocation.allocate_from == 'LiveStockProvinceJahad': jahad_products = allocation.product dif = request.data['weight'] - allocation.weight if dif > jahad_products.total_remain_weight: return Response( {"result": "به علت عدم همخوانی موجودی و تخصیصات امکان ویرایش با این وزن وجود ندارد!"}, status=status.HTTP_403_FORBIDDEN) else: union_products = allocation.product dif = request.data['weight'] - allocation.weight if dif > union_products.total_remain_weight: return Response( {"result": "به علت عدم همخوانی موجودی و تخصیصات امکان ویرایش با این وزن وجود ندارد!"}, status=status.HTTP_403_FORBIDDEN) elif request.data['weight'] < allocation.weight: dif = allocation.weight - request.data['weight'] if allocation.allocate_to == 'Union': union_role_product = LiveStockRolseProduct.objects.get(union=allocation.union,parent_product=allocation.product.parent_product, trash=False) if dif > union_role_product.total_remain_weight: return Response( {"result": "به علت عدم همخوانی موجودی مقصد امکان ویرایش با این وزن وجود ندارد!"}, status=status.HTTP_403_FORBIDDEN) elif allocation.allocate_to == 'Cooperative': cooperative_role_product = LiveStockRolseProduct.objects.get(cooperative=allocation.cooperative,parent_product=allocation.product.parent_product, trash=False) if dif > (cooperative_role_product.total_receipt_weight - cooperative_role_product.total_weight): return Response( {"result": "به علت عدم همخوانی موجودی مقصد امکان ویرایش با این وزن وجود ندارد!"}, status=status.HTTP_403_FORBIDDEN) serializer = self.serializer_class(allocation) serializer.update(instance=allocation, validated_data=request.data) product = allocation.product if allocation.allocate_from == 'LiveStockProvinceJahad': jahad_warehousing(product) elif allocation.allocate_from == 'Cooperative': pass else: union_warehousing(product) if allocation.allocate_to == 'Union': reciver_product = LiveStockRolseProduct.objects.get(parent_product=product.parent_product, union=allocation.union) union_warehousing(reciver_product) elif allocation.allocate_to == 'Cooperative': reciver_product = LiveStockRolseProduct.objects.get(parent_product=product.parent_product, cooperative=allocation.cooperative) cooperative_warehousing(reciver_product) else: pass return Response(serializer.data, status=status.HTTP_200_OK) def list(self, request, *args, **kwargs): user = SystemUserProfile.objects.get(user=request.user, trash=False) products = { "bran":"سبوس", "barley":"جو", "soy":"سویا", "corn":"ذرت", "sheep_concentrate":"کنسانتره گوسفندی", "high_cow_concentrate":"کنسانتره گاو شیری پرتولید", "medium_cow_concentrate":"کنسانتره گاو شیری متوسط", "fattening_calf_concentrate":"کنسانتره گوساله پرواری", } name =products[request.GET.get('name')] product = LiveStockProduct.objects.filter(trash=False, name=name).first() if request.GET['role'] == 'LiveStockProvinceJahad': allocations = LiveStockAllocations.objects.filter(jahad__isnull=False, allocate_from="LiveStockProvinceJahad", trash=False, product__parent_product=product).order_by( 'id').exclude(allocate_to='LiveStockProvinceJahad') elif request.GET['role'] == 'Union': allocations = LiveStockAllocations.objects.filter(union__isnull=False, trash=False, allocate_from="Union", product__parent_product=product).order_by('id') else: allocations = LiveStockAllocations.objects.filter(cooperative__user=user, charge=False, allocate_to="Cooperative", trash=False, product__parent_product=product).order_by( 'id') date1 = request.GET.get('date1') date2 = request.GET.get('date2') if date1 and date2: date1 = datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date() date2 = datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date() allocations = allocations.filter(date__date__gte=date1, date__date__lte=date2) value = request.GET.get('value') search = request.GET.get('search') if value and search == 'filter': if search != 'undefined' and search.strip(): allocations = allocations.filter( build_query(self.filterset_class.Meta.fields, value) ) page_size = request.query_params.get('page_size', None) if page_size: self.pagination_class.page_size = int(page_size) page = self.paginate_queryset(allocations) if page is not None: serializer = self.get_serializer(page, many=True) return self.get_paginated_response(serializer.data) serializer = self.serializer_class(allocations, many=True) return Response(serializer.data, status=status.HTTP_200_OK) def destroy(self, request, pk=None, *args, **kwargs): allocation = LiveStockAllocations.objects.get(key=request.GET["allocation_key"]) product = allocation.product if allocation.allocate_from == 'LiveStockProvinceJahad': if allocation.allocate_to == 'LiveStockProvinceJahad': roles_product = allocation.product elif allocation.allocate_to == 'Union': roles_product = LiveStockRolseProduct.objects.get(union=allocation.union,parent_product=allocation.product.parent_product) else: roles_product = LiveStockRolseProduct.objects.get(cooperative=allocation.cooperative,parent_product=allocation.product.parent_product) if allocation.weight > roles_product.total_remain_weight: if allocation.allocate_to == 'Cooperative': if roles_product.total_receipt_weight >= allocation.weight: pass else: return Response( {"result": "به علت عدم همخوانی موجودی و تخصیصات امکان حذف وجود ندارد!"}, status=status.HTTP_403_FORBIDDEN) elif allocation.allocate_from == 'Union': if allocation.allocate_to == 'Union': roles_product = allocation.product else: roles_product = LiveStockRolseProduct.objects.get(cooperative=allocation.cooperative,parent_product=allocation.product.parent_product) if allocation.weight > roles_product.total_remain_weight: if allocation.allocate_to == 'Cooperative': if roles_product.total_receipt_weight >= allocation.weight: pass else: return Response( {"result": "به علت عدم همخوانی موجودی و تخصیصات امکان حذف وجود ندارد!"}, status=status.HTTP_403_FORBIDDEN) else: cooperative_roles_product = allocation.product if allocation.weight > cooperative_roles_product.total_remain_weight: return Response( {"result": "به علت عدم همخوانی موجودی و تخصیصات امکان حذف وجود ندارد!"}, status=status.HTTP_403_FORBIDDEN) allocation.trash = True allocation.save() if allocation.allocate_from == 'LiveStockProvinceJahad': jahad_warehousing(product) elif allocation.allocate_from == 'Cooperative': pass else: union_warehousing(product) if allocation.allocate_to == 'Union': reciver_product = LiveStockRolseProduct.objects.get(parent_product=product.parent_product, union=allocation.union) union_warehousing(reciver_product) elif allocation.allocate_to == 'Cooperative': reciver_product = LiveStockRolseProduct.objects.get(parent_product=product.parent_product, cooperative=allocation.cooperative) cooperative_warehousing(reciver_product) else: pass return Response({"result": "با موفقیت حذف شد"}, status=status.HTTP_200_OK) class CooperativeProductsShareViewSet(viewsets.ModelViewSet): queryset = CooperativeProductsShare.objects.all() permission_classes = [TokenHasReadWriteScope] serializer_class = CooperativeProductsShareSerializer pagination_class = CustomPagination filterset_class = CooperativeProductsShareFilterSet def update(self, request, pk=None, *args, **kwargs): share = CooperativeProductsShare.objects.get(key=request.data['share_key'], trash=False) request.data.pop('share_key') serializer = self.serializer_class(share) serializer.update(instance=share, validated_data=request.data) return Response(serializer.data, status=status.HTTP_200_OK) def list(self, request, *args, **kwargs): shares = CooperativeProductsShare.objects.filter(product__name=request.GET['name'], trash=False).order_by( 'id') value = request.GET.get('value') search = request.GET.get('search') if value and search == 'filter': if search != 'undefined' and search.strip(): shares = shares.filter( build_query(self.filterset_class.Meta.fields, value) ) page_size = request.query_params.get('page_size', None) if page_size: self.pagination_class.page_size = int(page_size) page = self.paginate_queryset(shares) if page is not None: serializer = self.get_serializer(page, many=True) return self.get_paginated_response(serializer.data) serializer = self.serializer_class(shares, many=True) return Response(serializer.data, status=status.HTTP_200_OK) class LiveStockProductViewset(viewsets.ModelViewSet): queryset = LiveStockProduct.objects.all() permission_classes = [AllowAny] serializer_class = LiveStockProductSerializer def list(self, request, *args, **kwargs): products = { "bran":"سبوس", "barley":"جو", "soy":"سویا", "corn":"ذرت", "sheep_concentrate":"کنسانتره گوسفندی", "high_cow_concentrate":"کنسانتره گاو شیری پرتولید", "medium_cow_concentrate":"کنسانتره گاو شیری متوسط", "fattening_calf_concentrate":"کنسانتره گوساله پرواری", } name =products[request.GET.get('name')] products = LiveStockProduct.objects.filter(trash=False, name=name).first() serializer = self.serializer_class(products) return Response(serializer.data, status=status.HTTP_200_OK) def update(self, request, *args, **kwargs): products = LiveStockProduct.objects.get(key=request.data['key']) request.data.pop('key') serializer = self.serializer_class(products) serializer.update(instance=products, validated_data=request.data) # todo:اگه نیاز شده با ترد بنویس تا همه دامدار ها اپدیت بشن # send = threading.Thread(target=update_quota_rancher_threading) # send.start() return Response(serializer.data, status=status.HTTP_200_OK) class DashboardLiveStockAllocationsViewSet(viewsets.ModelViewSet): queryset = LiveStockAllocations.objects.all() permission_classes = [TokenHasReadWriteScope] serializer_class = LiveStockAllocationsSerializer filterset_class = LiveStockAllocationsFilterSet def list(self, request, *args, **kwargs): products = { "bran":"سبوس", "barley":"جو", "soy":"سویا", "corn":"ذرت", "sheep_concentrate":"کنسانتره گوسفندی", "high_cow_concentrate":"کنسانتره گاو شیری پرتولید", "medium_cow_concentrate":"کنسانتره گاو شیری متوسط", "fattening_calf_concentrate":"کنسانتره گوساله پرواری", } role = request.GET.get('role') name =products[request.GET.get('name')] user = SystemUserProfile.objects.get(user=request.user, trash=False) product = LiveStockProduct.objects.filter(trash=False, name=name).first() if request.GET['role'] == 'LiveStockProvinceJahad': allocations = LiveStockAllocations.objects.filter(jahad__isnull=False, trash=False, product__parent_product=product).order_by('id') roles_new_product = LiveStockRolseProduct.objects.filter(jahad__isnull=False, trash=False , parent_product=product).first() elif request.GET['role'] == 'Union': allocations = LiveStockAllocations.objects.filter(union__user=user, trash=False, product__parent_product=product).order_by('id') roles_new_product = LiveStockRolseProduct.objects.filter(union__user=user, trash=False, parent_product=product).first() else: allocations = LiveStockAllocations.objects.filter(cooperative__user=user, trash=False, product__parent_product=product).order_by('id') roles_new_product = LiveStockRolseProduct.objects.filter(cooperative__user=user, trash=False, parent_product=product).first() date1 = request.GET.get('date1') date2 = request.GET.get('date2') if date1 and date2: date1 = datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date() date2 = datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date() allocations = allocations.filter(date__date__gte=date1, date__date__lte=date2) value = request.GET.get('value') search = request.GET.get('search') if value and search == 'filter': if search != 'undefined' and search.strip(): allocations = allocations.filter( build_query(self.filterset_class.Meta.fields, value) ) jahat_to_union = allocations.filter(jahad__isnull=False, allocate_to='Union') jahat_to_cooperative = allocations.filter(jahad__isnull=False, allocate_to='Cooperative') union_to_cooperative = LiveStockAllocations.objects.filter(union__isnull=False, trash=False, allocate_to='Cooperative') if role == 'Union': union_to_cooperative = LiveStockAllocations.objects.filter(union__isnull=False,trash=False, allocate_to='Cooperative') jahat_to_union_weight = jahat_to_union.aggregate(total=Sum('weight'))[ 'total'] or 0 jahat_to_union_real_weight = jahat_to_union.aggregate(total=Sum('real_weight'))[ 'total'] or 0 jahat_to_cooperative_weight = jahat_to_cooperative.aggregate(total=Sum('weight'))[ 'total'] or 0 jahat_to_cooperative_real_weight = jahat_to_cooperative.aggregate(total=Sum('real_weight'))[ 'total'] or 0 union_to_cooperative_weight = union_to_cooperative.aggregate(total=Sum('weight'))[ 'total'] or 0 union_to_cooperative_real_weight = union_to_cooperative.aggregate(total=Sum('real_weight'))[ 'total'] or 0 if role =='Union': role_product_union = roles_new_product.total_remain_weight role_product_cooperative = 0 role_product_cooperative_receipt_weight = 0 elif role == 'Cooperative': role_product_union = 0 role_product_cooperative = roles_new_product.total_remain_weight role_product_cooperative_receipt_weight = roles_new_product.total_receipt_weight else: roles_product = LiveStockRolseProduct.objects.filter(trash=False, parent_product=product) union_remain = roles_product.filter(union__isnull=False) cooperative_remain = roles_product.filter(cooperative__isnull=False) role_product_union = union_remain.aggregate(total=Sum('total_remain_weight'))[ 'total'] or 0 role_product_cooperative = cooperative_remain.aggregate(total=Sum('total_remain_weight'))[ 'total'] or 0 role_product_cooperative_receipt_weight = cooperative_remain.aggregate(total=Sum('total_receipt_weight'))[ 'total'] or 0 if allocations: dict1 = { "total_weight": roles_new_product.total_weight, "jahad_to_union": jahat_to_union_weight, "jahat_to_union_real_weight": jahat_to_union_real_weight, "jahat_to_cooperative": jahat_to_cooperative_weight, "jahat_to_cooperative_real_weight": jahat_to_cooperative_real_weight, "allocation_count": roles_new_product.total_allocated_weight, "union_to_cooperative": union_to_cooperative_weight, "union_to_cooperative_real_weight": union_to_cooperative_real_weight, "total_remain_weight_jahad": roles_new_product.total_remain_weight, "total_remain_weight_union": role_product_union, "total_remain_weight_cooperative": role_product_cooperative, "role_product_cooperative_receipt_weight": role_product_cooperative_receipt_weight, "total_remain_weight": roles_new_product.total_remain_weight, } else: dict1 = { "total_weight": 0, "jahad_to_union": 0, "jahat_to_cooperative": 0, "allocation_count": 0, "union_to_cooperative": 0, "total_remain_weight_jahad": 0, "total_remain_weight_union": 0, "total_remain_weight_cooperative": 0, "total_remain_weight": 0, "jahat_to_union_real_weight": 0, "union_to_cooperative_real_weight": 0, "jahat_to_cooperative_real_weight": 0, "role_product_cooperative_receipt_weight": role_product_cooperative_receipt_weight, } return Response(dict1, status=status.HTTP_200_OK) class LiveStockWarehouseChargeAllocationsViewSet(viewsets.ModelViewSet): queryset = LiveStockAllocations.objects.all() permission_classes = [TokenHasReadWriteScope] serializer_class = LiveStockAllocationsSerializer pagination_class = CustomPagination filterset_class = LiveStockAllocationsFilterSet def list(self, request, *args, **kwargs): user = SystemUserProfile.objects.get(user=request.user, trash=False) products = { "bran":"سبوس", "barley":"جو", "soy":"سویا", "corn":"ذرت", "sheep_concentrate":"کنسانتره گوسفندی", "high_cow_concentrate":"کنسانتره گاو شیری پرتولید", "medium_cow_concentrate":"کنسانتره گاو شیری متوسط", "fattening_calf_concentrate":"کنسانتره گوساله پرواری", } name =products[request.GET.get('name')] product = LiveStockProduct.objects.filter(trash=False, name=name).first() if request.GET['role'] == 'LiveStockProvinceJahad': allocations = LiveStockAllocations.objects.filter(jahad__isnull=False, trash=False, product__parent_product=product, allocate_to='LiveStockProvinceJahad').order_by('id') elif request.GET['role'] == 'Union': allocations = LiveStockAllocations.objects.filter(allocate_from='LiveStockProvinceJahad', union__isnull=False, trash=False, product__parent_product=product).order_by( 'id') else: # allocations = LiveStockAllocations.objects.filter( # allocate_from__in=('LiveStockProvinceJahad', 'Union', 'Cooperative'), cooperative__user=user, # trash=False, product__parent_product=product).order_by('id') allocations = LiveStockAllocations.objects.filter( charge=True, cooperative__user=user, trash=False, product__parent_product=product).order_by('id') date1 = request.GET.get('date1') date2 = request.GET.get('date2') if date1 and date2: date1 = datetime.strptime(str(request.GET['date1']), '%Y-%m-%d').date() date2 = datetime.strptime(str(request.GET['date2']), '%Y-%m-%d').date() allocations = allocations.filter(date__date__gte=date1, date__date__lte=date2) value = request.GET.get('value') search = request.GET.get('search') if value and search == 'filter': if search != 'undefined' and search.strip(): allocations = allocations.filter( build_query(self.filterset_class.Meta.fields, value) ) page_size = request.query_params.get('page_size', None) if page_size: self.pagination_class.page_size = int(page_size) page = self.paginate_queryset(allocations) if page is not None: serializer = self.get_serializer(page, many=True) return self.get_paginated_response(serializer.data) serializer = self.serializer_class(allocations, many=True) return Response(serializer.data, status=status.HTTP_200_OK) @api_view(["GET"]) @csrf_exempt @permission_classes([TokenHasReadWriteScope]) def get_user_live_stock(request): type = request.GET['type'] if type == 'Union': unions = Union.objects.filter(trash=False).order_by('id') serializer = UnionSerializer(unions, many=True) else: cooperatives = Cooperative.objects.filter(trash=False).order_by('id') serializer = RancherSerializer(cooperatives, many=True) return Response(serializer.data, status=status.HTTP_200_OK)