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"]