ixg_platform/apps/qc/serializers.py

49 lines
1.5 KiB
Python

from rest_framework import serializers
from .models import QCResult
from apps.batches.models import ProcessingBatch
from apps.capa.models import CAPARecord
class QCResultSerializer(serializers.ModelSerializer):
class Meta:
model = QCResult
fields = "__all__"
read_only_fields = ["id", "overall_pass", "tested_at"]
class QCResultCreateSerializer(serializers.ModelSerializer):
class Meta:
model = QCResult
fields = ["batch", "ffa_percentage", "moisture_percentage", "peroxide_value", "visual_grade", "tested_by", "lab_reference"]
def create(self, validated_data):
ffa = validated_data["ffa_percentage"]
moisture = validated_data["moisture_percentage"]
peroxide = validated_data["peroxide_value"]
visual = validated_data["visual_grade"]
overall_pass = all([
ffa <= 3,
moisture <= 0.1,
peroxide <= 10,
visual != "Fail",
])
validated_data["overall_pass"] = overall_pass
qc_result = super().create(validated_data)
batch = validated_data["batch"]
if overall_pass:
batch.status = ProcessingBatch.Status.QC_PASS
else:
batch.status = ProcessingBatch.Status.QC_FAIL
batch.save()
if not overall_pass:
CAPARecord.objects.create(
batch=batch,
issue_description=f"QC failure on batch {batch.batch_reference}",
status=CAPARecord.Status.OPEN,
)
return qc_result