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]