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