Files
2026-06-15 10:57:28 +03:30

107 lines
3.7 KiB
Python

from rest_framework import serializers
from apps.cuser.models import CUser as CUserModel
from rest_framework.views import APIView
from rest_framework.generics import ListAPIView
from rest_framework.response import Response
from rest_framework.permissions import IsAuthenticated
from utils.tools.inline_serializer import inline_serializer
from utils.standard_pagination import StandardPagination
from utils.order_pagination import OrderViewPagination
from apps.order.models import Order as OrderModel
from apps.op_panel.selector import get_orders_list, get_order
from apps.op_panel.services import update_order
from rest_framework import status
class RetrieveOrderApiView(APIView):
permission_classes = (IsAuthenticated,)
class OutputSerializer(serializers.Serializer):
id = serializers.IntegerField()
name = serializers.CharField()
status = serializers.CharField()
# get status choices display
status_text = serializers.CharField(source='get_status_display')
code = serializers.CharField()
desc = serializers.CharField()
cuser_mojri = inline_serializer(many=False, fields={
'id': serializers.IntegerField(),
'name_family': serializers.CharField(),
'user_profile': inline_serializer(many=False, fields={
'address': serializers.CharField()
})
})
def get(self, request, id: int):
order = get_order(id)
serializer = self.OutputSerializer(order)
return Response(serializer.data, status=status.HTTP_200_OK)
class UpdateOrderApiView(APIView):
permission_classes = (IsAuthenticated,)
class InputSerializer(serializers.Serializer):
code = serializers.CharField()
desc = serializers.CharField()
def patch(self, request, id: int):
serializer = self.InputSerializer(data=request.data)
serializer.is_valid(raise_exception=True)
code = serializer.validated_data['code']
desc = serializer.validated_data['desc']
update_order(id, 'approve', code, desc)
return Response({'id': id}, status=status.HTTP_200_OK)
class OrderListView(ListAPIView):
class OutputSerializer(serializers.ModelSerializer):
city = serializers.SerializerMethodField()
ostan = serializers.SerializerMethodField()
name_family = serializers.SerializerMethodField()
mojri_id = serializers.SerializerMethodField()
mobile = serializers.SerializerMethodField()
class Meta:
model = OrderModel
fields = ('id', 'mojri_id', 'mobile' , 'city', 'name', 'ostan', 'name_family', 'desc', 'status')
def get_city(self, obj):
if obj.cuser_mojri.user_profile.city is None:
return ''
return obj.cuser_mojri.user_profile.city.name
def get_ostan(self, obj):
if obj.cuser_mojri.user_profile.city is None:
return ''
return obj.cuser_mojri.user_profile.city.ostan.name
def get_name_family(self, obj):
if obj.cuser_mojri is None:
return ''
return obj.cuser_mojri.name_family
def get_mojri_id(self, obj):
if obj.cuser_mojri is None:
return ''
return obj.cuser_mojri.id
def get_mobile(self, obj):
if obj.cuser_mojri is None:
return ''
return obj.cuser_mojri.mobile
permission_classes = (IsAuthenticated,)
pagination_class = OrderViewPagination
serializer_class = OutputSerializer
def get_queryset(self):
rq_status = self.request.query_params.get('status')
orders = get_orders_list(status=rq_status)
return orders