haikal/api/views.py
2025-04-28 14:40:08 +03:00

127 lines
4.4 KiB
Python

from django.core.paginator import Paginator
from django.db.models import Q
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
from rest_framework import permissions, status, viewsets, generics
from rest_framework.views import APIView
from rest_framework.response import Response
from django.contrib.auth import authenticate
from django.shortcuts import render
from inventory.utils import get_user_type
from . import models, serializers
from .services import get_car_data, get_from_cardatabase
# from rest_framework.authtoken.models import Token
from django.utils.decorators import method_decorator
from inventory import models as inventory_models
class LoginView(APIView):
permission_classes = [permissions.AllowAny,]
# def post(self, request, *args, **kwargs):
# username = request.data.get('username')
# password = request.data.get('password')
# if username is None or password is None:
# return Response({'error': 'Please provide both username and password.'}, status=status.HTTP_400_BAD_REQUEST)
# user = authenticate(username=username, password=password)
# if not user:
# return Response({'error': 'Invalid credentials.'}, status=status.HTTP_401_UNAUTHORIZED)
# token, created = Token.objects.get_or_create(user=user)
# return Response({'token': token.key, 'user_id': user.id, 'username': user.username}, status=status.HTTP_200_OK)
class CarVINViewSet(APIView):
queryset = models.CarVIN.objects.all().order_by('-created')
serializer_class = serializers.CarVINSerializer
def get(self, request):
vin = models.CarVIN.objects.all()
serializer = serializers.CarVINSerializer(vin, many=True)
return Response(serializer.data)
def post(self, request):
serializer = serializers.CarVINSerializer(data=request.data)
if serializer.is_valid(raise_exception=True):
for key, value in serializer.validated_data.items():
print(key, value)
get_car_data(value)
# get_from_cardatabase(value)
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
class CarMakeViewSet(viewsets.ModelViewSet):
queryset = inventory_models.CarMake.objects.filter(is_sa_import=True)
serializer_class = serializers.CarMakeSerializer
class CarModelViewSet(viewsets.ModelViewSet):
queryset = inventory_models.CarModel.objects.filter(id_car_make__is_sa_import=True)
serializer_class = serializers.CarModelSerializer
class CarSerieViewSet(viewsets.ModelViewSet):
queryset = inventory_models.CarSerie.objects.all()
serializer_class = serializers.CarSerieSerializer
class CarTrimViewSet(viewsets.ModelViewSet):
queryset = inventory_models.CarTrim.objects.all()
serializer_class = serializers.CarTrimSerializer
class CarEquipmentViewSet(viewsets.ModelViewSet):
queryset = inventory_models.CarEquipment.objects.all()
serializer_class = serializers.CarEquipmentSerializer
class CarSpecificationViewSet(viewsets.ModelViewSet):
queryset = inventory_models.CarSpecification.objects.all()
serializer_class = serializers.CarSpecificationSerializer
class CarSpecificationValueViewSet(viewsets.ModelViewSet):
queryset = inventory_models.CarSpecificationValue.objects.all()
serializer_class = serializers.CarSpecificationValueSerializer
class CarOptionViewSet(viewsets.ModelViewSet):
queryset = inventory_models.CarOption.objects.all()
serializer_class = serializers.CarOptionSerializer
class CarOptionValueViewSet(viewsets.ModelViewSet):
queryset = inventory_models.CarOptionValue.objects.all()
serializer_class = serializers.CarOptionValueSerializer
def car_list(request):
dealer = get_user_type(request)
page = request.GET.get("page", 1)
per_page = 10
cars = inventory_models.Car.objects.filter(dealer=dealer).values(
"vin",
"id_car_make__name",
"id_car_model__name",
"status"
)
paginator = Paginator(cars, per_page)
page_obj = paginator.get_page(page)
return JsonResponse({
"data": list(page_obj), # Convert QuerySet to list
"page": page_obj.number, # Current page number
"per_page": per_page,
"total_pages": paginator.num_pages, # Total pages
"total_items": paginator.count # Total records
})