From 824ad25a175733a20d61d59cdf83043cff5a803c Mon Sep 17 00:00:00 2001 From: behruz-dev Date: Thu, 4 Dec 2025 17:47:47 +0500 Subject: [PATCH] yangi api qoshildi --- core/apps/shared/serializers/dis_product.py | 24 +++++++ core/apps/shared/urls.py | 9 ++- core/apps/shared/views/dis_product.py | 75 +++++++++++++++++++++ 3 files changed, 107 insertions(+), 1 deletion(-) create mode 100644 core/apps/shared/serializers/dis_product.py create mode 100644 core/apps/shared/views/dis_product.py diff --git a/core/apps/shared/serializers/dis_product.py b/core/apps/shared/serializers/dis_product.py new file mode 100644 index 0000000..20cf05a --- /dev/null +++ b/core/apps/shared/serializers/dis_product.py @@ -0,0 +1,24 @@ +# rest framework +from rest_framework import serializers + +# orders +from core.apps.orders.models import DistributedProduct + + +class DistributedProductListSerializer(serializers.ModelSerializer): + product = serializers.SerializerMethodField(method_name='get_product') + + class Meta: + model = DistributedProduct + fields = [ + 'id', 'product', 'quantity', 'employee_name', 'quantity', 'created_at' + ] + ref_name = "DisProductListSerializer" + + def get_product(self, obj): + return { + "id": obj.product.id, + "name": obj.product.name, + "price": obj.product.price, + } + \ No newline at end of file diff --git a/core/apps/shared/urls.py b/core/apps/shared/urls.py index 43c2042..0e96dd4 100644 --- a/core/apps/shared/urls.py +++ b/core/apps/shared/urls.py @@ -20,6 +20,8 @@ from core.apps.shared.views import tour_plan as tp_view from core.apps.shared.views import factory as factory_view # shared support view from core.apps.shared.views import support as support_view +# shared dis product +from core.apps.shared.views import dis_product as dp_view urlpatterns = [ @@ -90,5 +92,10 @@ urlpatterns = [ path('send/', support_view.SupportCreateApiView.as_view(), name='support-create-api'), path('list/', support_view.SupportListApiView.as_view(), name='support-list-api'), ] - )) + )), + path('distributed_product/', include( + [ + path('list/', dp_view.DistributedProductListApiView.as_view()), + ] + )), ] \ No newline at end of file diff --git a/core/apps/shared/views/dis_product.py b/core/apps/shared/views/dis_product.py new file mode 100644 index 0000000..fde47f0 --- /dev/null +++ b/core/apps/shared/views/dis_product.py @@ -0,0 +1,75 @@ +# django +from django.db.models import Q + +# rest framework +from rest_framework import generics, permissions + +# drf yasg +from drf_yasg import openapi +from drf_yasg.utils import swagger_auto_schema + +# orders +from core.apps.orders.models import DistributedProduct + +# shared +from core.apps.shared.utils.response_mixin import ResponseMixin + +# dashboard +from core.apps.shared.serializers.dis_product import DistributedProductListSerializer + + +class DistributedProductListApiView(generics.GenericAPIView, ResponseMixin): + serializer_class = DistributedProductListSerializer + queryset = DistributedProduct.objects.all() + permission_classes = [permissions.IsAdminUser] + + @swagger_auto_schema( + manual_parameters=[ + openapi.Parameter( + in_=openapi.IN_QUERY, + name="product", + description="product name bo'yicha filter", + required=False, + type=openapi.TYPE_STRING, + ), + openapi.Parameter( + in_=openapi.IN_QUERY, + name="date", + description="date bo'yicha qidirish", + required=False, + type=openapi.FORMAT_DATE, + ), + ], + ) + def get(self, request): + try: + product_name = request.query_params.get('product', None) + date = request.query_params.get('date', None) + + queryset = self.queryset.filter(user=request.user) + + # filters + if product_name is not None: + queryset = queryset.filter(product__name__istartswith=product_name) + + if date is not None: + queryset = queryset.filter(date=date) + + page = self.paginate_queryset(queryset) + if page is not None: + serializer = self.serializer_class(page, many=True) + return self.success_response( + data=self.get_paginated_response(serializer.data).data, + message="Malumotlar fetch qilindi", + ) + serializer = self.serializer_class(queryset, many=True) + return self.success_response( + data=serializer.data, + message='Malumotlar fetch qilindi' + ) + + except Exception as e: + return self.error_response( + data=str(e), + message='xatolik, iltimos backend dasturchiga murojaat qiling' + ) \ No newline at end of file