add generation_pdf pdf , fix 500 error , install reportlab

This commit is contained in:
Shaxobff
2026-05-04 16:15:12 +05:00
parent 1ff23af8bf
commit 0c9c726756
7 changed files with 195 additions and 10 deletions

View File

@@ -87,3 +87,29 @@ class CreateVehicleSerializer(serializers.ModelSerializer):
"condition",
"position",
]
class VehicleApplicationSerializer(serializers.Serializer):
person_name = serializers.CharField()
property_owner = serializers.CharField(max_length=100)
address = serializers.CharField(max_length=255)
marka = serializers.CharField(max_length=100)
model = serializers.CharField(max_length=100)
configuration = serializers.CharField(max_length=100)
auto_number = serializers.CharField(max_length=100)
date_created = serializers.DateTimeField()
mileage = serializers.IntegerField()
vehicle_identification = serializers.CharField(max_length=100)
engine_number = serializers.CharField(max_length=100)
colour = serializers.CharField(max_length=100)
registration_certificate_series = serializers.CharField(max_length=100)
tec_passport_number = serializers.CharField(max_length=100)
tec_passport_date = serializers.DateTimeField()
tec_passport_place = serializers.CharField(max_length=255)
body_type = serializers.CharField(max_length=100)
chassis = serializers.CharField(max_length=100)
plate = serializers.CharField(max_length=100)
value_type = serializers.CharField(max_length=100)
evaluation_purpose = serializers.CharField(max_length=100)
personal_id_number = serializers.IntegerField()
id_number = serializers.CharField(max_length=9)

View File

@@ -88,4 +88,5 @@ urlpatterns = [
)),
path("calculate_avg_cost/", views.AvgCostAPIView.as_view()),
path("vehicle_document/", views.GeneratePDFView.as_view()),
]

View File

@@ -1,16 +1,19 @@
# django core
from django.http import HttpResponse
from django_core.mixins import BaseViewSetMixin
# swagger
from drf_spectacular.utils import extend_schema
# rest framework
from rest_framework.permissions import AllowAny
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response
from rest_framework.views import APIView
from rest_framework.viewsets import ReadOnlyModelViewSet
# core apps
from core.apps.evaluation.models import VehicleModel
from core.apps.evaluation.serializers import vehicle as serialziers
from core.apps.evaluation.serializers import vehicle as serialziers, VehicleApplicationSerializer
from core.utils.generation_pdf import PDFService
@extend_schema(tags=["Vehicle"])
@@ -27,3 +30,19 @@ class VehicleView(BaseViewSetMixin, ReadOnlyModelViewSet):
"retrieve": serialziers.RetrieveVehicleSerializer,
"create": serialziers.CreateVehicleSerializer,
}
@extend_schema(tags=['GenerationDocument'], request=VehicleApplicationSerializer)
class GeneratePDFView(APIView):
permission_classes = [IsAuthenticated]
def post(self, request):
serializer = VehicleApplicationSerializer(data=request.data)
if not serializer.is_valid():
return Response(serializer.errors, status=400)
pdf_buffer = PDFService.generate_vehicle_pdf(serializer.validated_data)
response = HttpResponse(pdf_buffer, content_type='application/pdf')
response['Content-Disposition'] = 'attachment; filename="ariza.pdf"'
return response

View File

@@ -20,7 +20,7 @@ urlpatterns = [
path('task/', include(
[
path('list/', task.TaskListView.as_view()),
path('<int:id>/', task.TaskDetailView.as_view()),
path('<int:pk>/', task.TaskDetailView.as_view()),
path('create/', task.TaskCreateView.as_view()),
]
)),

View File

@@ -1,9 +1,7 @@
from django.db import transaction
from rest_framework import permissions, generics
from rest_framework.response import Response
from drf_spectacular.utils import extend_schema
from rest_framework import permissions, generics, status
from rest_framework.response import Response
from core.apps.tasks.models.task import Task
from core.apps.tasks.serializers.task import TaskSerializer, TaskCreateSerializer
@@ -18,7 +16,8 @@ class TaskCreateView(generics.GenericAPIView):
@transaction.atomic
def post(self, request):
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
if not serializer.is_valid(raise_exception=True):
return Response(serializer.validated_data, status=status.HTTP_400_BAD_REQUEST)
serializer.save()
return Response(serializer.data)