From 046ec09849a0075b1c7c7fb57dc1937b1c9d8af3 Mon Sep 17 00:00:00 2001 From: behruz-dev Date: Mon, 1 Dec 2025 16:40:41 +0500 Subject: [PATCH] fix --- core/apps/dashboard/serializers/payment.py | 25 ++++++++++++ core/apps/dashboard/urls.py | 7 ++++ core/apps/dashboard/views/payment.py | 46 ++++++++++++++++++++++ core/apps/orders/admin/order.py | 9 ++++- core/apps/orders/models/payment.py | 2 +- 5 files changed, 86 insertions(+), 3 deletions(-) create mode 100644 core/apps/dashboard/serializers/payment.py create mode 100644 core/apps/dashboard/views/payment.py diff --git a/core/apps/dashboard/serializers/payment.py b/core/apps/dashboard/serializers/payment.py new file mode 100644 index 0000000..d7e07ce --- /dev/null +++ b/core/apps/dashboard/serializers/payment.py @@ -0,0 +1,25 @@ +# rest framework +from rest_framework import serializers + +# orders +from core.apps.orders.models import Payment + + +class PaymentListSerializer(serializers.ModelSerializer): + employee_name = serializers.SerializerMethodField(method_name='get_employee_name') + factory = serializers.SerializerMethodField(method_name='get_factory') + + class Meta: + model = Payment + fields = [ + 'id', 'employee_name', 'factory', 'price', 'created_at' + ] + + def get_employee_name(self, obj): + return obj.order.employee_name + + def get_factory(self, obj): + return { + 'id': obj.order.factory.id, + 'name': obj.order.factory.name, + } diff --git a/core/apps/dashboard/urls.py b/core/apps/dashboard/urls.py index 1f738cf..2e9fa26 100644 --- a/core/apps/dashboard/urls.py +++ b/core/apps/dashboard/urls.py @@ -27,6 +27,8 @@ from core.apps.dashboard.views.factory import FactoryViewSet from core.apps.dashboard.views.tour_plan import TourPlanViewSet # order from core.apps.dashboard.views.order import OrderViewSet +# payment +from core.apps.dashboard.views.payment import PaymentListApiView urlpatterns = [ @@ -58,6 +60,11 @@ urlpatterns = [ path('/delete/', region_views.RegionDeleteApiView.as_view(), name='region-delete-api'), ] )), + path('payment/', include( + [ + path('list/', PaymentListApiView.as_view(), name='payment-list-api'), + ] + )) ] diff --git a/core/apps/dashboard/views/payment.py b/core/apps/dashboard/views/payment.py new file mode 100644 index 0000000..7a926eb --- /dev/null +++ b/core/apps/dashboard/views/payment.py @@ -0,0 +1,46 @@ +# django +from django.shortcuts import get_object_or_404 + +# rest framework +from rest_framework import generics +from rest_framework.permissions import IsAdminUser + +# drf yasg +from drf_yasg.utils import swagger_auto_schema + +# orders +from core.apps.orders.models import Payment +# shared +from core.apps.shared.utils.response_mixin import ResponseMixin +# dashboard +from core.apps.dashboard.serializers import payment as serializers + + +class PaymentListApiView(generics.GenericAPIView, ResponseMixin): + serializer_class = serializers.PaymentListSerializer + queryset = Payment.objects.all() + permission_classes = [IsAdminUser] + + @swagger_auto_schema( + tags=["Admin Orders"], + ) + def get(self, request): + try: + query = self.queryset.all() + page = self.paginate_queryset(queryset=query) + 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(query, 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' + ) \ No newline at end of file diff --git a/core/apps/orders/admin/order.py b/core/apps/orders/admin/order.py index a7d2c50..4998e17 100644 --- a/core/apps/orders/admin/order.py +++ b/core/apps/orders/admin/order.py @@ -1,7 +1,7 @@ from django.contrib import admin # orders -from core.apps.orders.models import Order, OrderItem +from core.apps.orders.models import Order, OrderItem, Payment class OrderItemInline(admin.TabularInline): @@ -9,7 +9,12 @@ class OrderItemInline(admin.TabularInline): extra = 0 +class PaymentInline(admin.TabularInline): + model = Payment + extra = 0 + + @admin.register(Order) class OrderAdmin(admin.ModelAdmin): list_display = ['id', 'employee_name', 'advance', 'paid_price', 'total_price'] - inlines = [OrderItemInline] \ No newline at end of file + inlines = [OrderItemInline, PaymentInline] diff --git a/core/apps/orders/models/payment.py b/core/apps/orders/models/payment.py index ba78987..6c062c7 100644 --- a/core/apps/orders/models/payment.py +++ b/core/apps/orders/models/payment.py @@ -12,5 +12,5 @@ class Payment(BaseModel): price = models.DecimalField(max_digits=15, decimal_places=2) def __str__(self): - return self.price + return f'{self.price}'