ixg_platform/apps/batches/serializers.py

56 lines
2 KiB
Python

from rest_framework import serializers
from .models import ProcessingBatch
class ProcessingBatchListSerializer(serializers.ModelSerializer):
qc_status = serializers.SerializerMethodField()
shipment_status = serializers.SerializerMethodField()
class Meta:
model = ProcessingBatch
fields = ["id", "batch_reference", "origin_facility", "grade", "weight_kg", "harvest_date", "status", "qc_status", "shipment_status", "created_at"]
def get_qc_status(self, obj):
qc = obj.qc_results.first()
if qc:
return "pass" if qc.overall_pass else "fail"
return "pending"
def get_shipment_status(self, obj):
shipment = obj.shipments.first()
return shipment.status if shipment else None
class ProcessingBatchDetailSerializer(serializers.ModelSerializer):
created_by_name = serializers.CharField(source="created_by.full_name", read_only=True)
qc_results = serializers.SerializerMethodField()
shipments = serializers.SerializerMethodField()
documents = serializers.SerializerMethodField()
class Meta:
model = ProcessingBatch
fields = "__all__"
def get_qc_results(self, obj):
qc = obj.qc_results.first()
if not qc:
return None
from apps.qc.serializers import QCResultSerializer
return QCResultSerializer(qc).data
def get_shipments(self, obj):
shipments = obj.shipments.all()
from apps.shipments.serializers import ShipmentSerializer
return ShipmentSerializer(shipments, many=True).data
def get_documents(self, obj):
docs = obj.documents.all()
from apps.documents.serializers import DocumentSerializer
return DocumentSerializer(docs, many=True).data
class ProcessingBatchWriteSerializer(serializers.ModelSerializer):
class Meta:
model = ProcessingBatch
fields = ["id", "batch_reference", "harvest_date", "weight_kg", "grade", "origin_facility", "notes", "status"]
read_only_fields = ["id"]