Major refactor of commerce and Stripe integration

Refactored commerce models to support refunds, invoices, and improved carrier/payment logic. Added new serializers and viewsets for products, categories, images, discount codes, and refunds. Introduced Stripe client integration and removed legacy Stripe admin/model code. Updated Dockerfile for PDF generation dependencies. Removed obsolete migration files and updated configuration app initialization. Added invoice template and tasks for order cleanup.
This commit is contained in:
2025-11-18 01:00:03 +01:00
parent 7a715efeda
commit b8a1a594b2
35 changed files with 1215 additions and 332 deletions

View File

@@ -1,8 +1,80 @@
#views.py
from rest_framework import viewsets, mixins, status
from rest_framework.decorators import action
from rest_framework.response import Response
"""
TODO: OBJEDNAVANÍ SE VYVOLÁVA V CARRIER V COMMERCE.MODELS.PY
získaní labelu,
info o kurýrovi, vracení balíku,
vytvoření hromadné expedice
"""
from drf_spectacular.utils import extend_schema, extend_schema_view, OpenApiResponse
from .models import ZasilkovnaShipment, ZasilkovnaPacket
from .serializers import (
ZasilkovnaShipmentSerializer,
ZasilkovnaPacketSerializer,
TrackingURLSerializer,
)
@extend_schema_view(
list=extend_schema(
tags=["Zásilkovna"],
summary="List shipments",
description="Returns a paginated list of Packeta (Zásilkovna) shipments.",
responses={200: ZasilkovnaShipmentSerializer},
),
retrieve=extend_schema(
tags=["Zásilkovna"],
summary="Retrieve a shipment",
description="Returns detail for a single shipment.",
responses={200: ZasilkovnaShipmentSerializer},
),
)
class ZasilkovnaShipmentViewSet(viewsets.ReadOnlyModelViewSet):
queryset = ZasilkovnaShipment.objects.all().order_by("-created_at")
serializer_class = ZasilkovnaShipmentSerializer
@extend_schema_view(
retrieve=extend_schema(
tags=["Zásilkovna"],
summary="Retrieve a packet",
description="Returns detail for a single packet.",
responses={200: ZasilkovnaPacketSerializer},
)
)
class ZasilkovnaPacketViewSet(mixins.RetrieveModelMixin, viewsets.GenericViewSet):
queryset = ZasilkovnaPacket.objects.all()
serializer_class = ZasilkovnaPacketSerializer
@extend_schema(
tags=["Zásilkovna"],
summary="Get public tracking URL",
description=(
"Returns the public Zásilkovna tracking URL derived from the packet's barcode."
),
responses={200: OpenApiResponse(response=TrackingURLSerializer)},
)
@action(detail=True, methods=["get"], url_path="tracking-url")
def tracking_url(self, request, pk=None):
packet: ZasilkovnaPacket = self.get_object()
data = {
"barcode": packet.barcode,
"tracking_url": packet.get_tracking_url(),
}
return Response(data)
@extend_schema(
tags=["Zásilkovna"],
summary="Cancel packet",
description=(
"Cancels the packet through the Packeta API and updates its state to CANCELED. "
"No request body is required."
),
request=None,
responses={200: OpenApiResponse(response=ZasilkovnaPacketSerializer)},
)
@action(detail=True, methods=["patch"], url_path="cancel")
def cancel(self, request, pk=None):
packet: ZasilkovnaPacket = self.get_object()
packet.cancel_packet()
serializer = self.get_serializer(packet)
return Response(serializer.data, status=status.HTTP_200_OK)