56 lines
2 KiB
Python
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"]
|