107 lines
3.7 KiB
Python
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
|
|
|