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