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 })