Source code for ferrosoft.apps.emiflow.api.views.tegos

#  Copyright (c) 2025 Ferrosoft GmbH. All rights reserved.
import logging

from rest_framework import status
from rest_framework.request import Request
from rest_framework.response import Response
from rest_framework.viewsets import ViewSet

from ferrosoft.apps.emiflow.api.serializer.tegos.order import OrderSerializer
from ferrosoft.apps.emiflow.api.serializer.tegos.treatment import TreatmentSerializer
from ferrosoft.apps.emiflow.api.serializer.transport import (
    EmissionBookingRecordSerializer,
)
from ferrosoft.apps.emiflow.models import (
    TransportChain,
    Treatment,
    TreatmentStatus,
    EmissionBookingRecord,
)
from ferrosoft.apps.ferrobase.tenant.utils import tenant_db_transaction


logger = logging.getLogger(__name__)


[docs] class OrderCreate(ViewSet):
[docs] @staticmethod def create(request: Request): serializer = OrderSerializer(data=request.data) if not serializer.is_valid(): return Response( {"errors": serializer.errors}, status=status.HTTP_400_BAD_REQUEST ) # noinspection PyBroadException try: emissions = [] with tenant_db_transaction(): instances: list[TransportChain] = serializer.save() for instance in instances: records = instance.post_emission() result = EmissionBookingRecordSerializer(records, many=True) emissions += result.data return Response({"emissions": emissions}) except Exception: logger.exception("Failed creating transport from Tegos order") return Response( {"error": "A server error occurred."}, status=status.HTTP_500_INTERNAL_SERVER_ERROR, )
[docs] class TreatmentCreate(ViewSet):
[docs] @staticmethod def create(request: Request): serializer = TreatmentSerializer(data=request.data) if not serializer.is_valid(): return Response( {"errors": serializer.errors}, status=status.HTTP_400_BAD_REQUEST ) # noinspection PyBroadException try: with tenant_db_transaction(): instance: Treatment = serializer.save() if instance.is_status(TreatmentStatus.POSTED): emissions = EmissionBookingRecord.objects.filter( entity_id=instance.pk ) else: emissions = instance.post_emission() result = EmissionBookingRecordSerializer(emissions, many=True) return Response({"emissions": result.data}) except Exception: logger.exception("Failed creating treatment from Tegos treatment") return Response( {"error": "A server error occurred."}, status=status.HTTP_500_INTERNAL_SERVER_ERROR, )
__ALL__ = [OrderCreate]