49 lines
1.5 KiB
Python
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
|