165 lines
5.4 KiB
Python
165 lines
5.4 KiB
Python
from django.core.paginator import Paginator
|
|
from django.http import JsonResponse
|
|
from rest_framework import permissions, status, viewsets
|
|
from inventory.utils import get_user_type
|
|
from . import models, serializers
|
|
from .services import get_car_data
|
|
from inventory import models as inventory_models
|
|
from rest_framework.views import APIView
|
|
from rest_framework.response import Response
|
|
from django.utils.translation import gettext as _
|
|
|
|
from inventory.services import decodevin
|
|
import logging
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
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.all().values(
|
|
"vin", "year", "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
|
|
}
|
|
)
|
|
|
|
|
|
class VinDecodeAPIView(APIView):
|
|
"""
|
|
API endpoint to decode a VIN number and return car make, model, and year.
|
|
|
|
GET Parameters:
|
|
- vin: The Vehicle Identification Number (VIN) to decode
|
|
|
|
Returns:
|
|
- JSON response with decoded data or error message
|
|
"""
|
|
|
|
permission_classes = [permissions.AllowAny]
|
|
|
|
def get(self, request, *args, **kwargs):
|
|
vin_no = request.GET.get("vin")
|
|
|
|
if not vin_no or len(vin_no.strip()) != 17:
|
|
return Response(
|
|
{"success": False, "error": _("Invalid VIN number provided")},
|
|
status=status.HTTP_400_BAD_REQUEST,
|
|
)
|
|
vin_no = vin_no.strip()
|
|
|
|
result = decodevin(vin_no)
|
|
if not result:
|
|
return Response(
|
|
{"success": False, "error": _("VIN not found in any source")},
|
|
status=status.HTTP_404_NOT_FOUND,
|
|
)
|
|
|
|
vin_data = {
|
|
"make": result.get("maker"),
|
|
"model": result.get("model_name"),
|
|
"modelYear": result.get("year_model"),
|
|
}
|
|
|
|
return Response({"success": True, "data": vin_data}, status=status.HTTP_200_OK)
|