from rest_framework import serializers from rest_framework.serializers import ModelSerializer from apps.inm.models import FIFO, FIFODetail, MaterialBatch, WareHouse from apps.mtm.models import Material from apps.pm.models import SubProductionPlan from django.utils import timezone class PickDetailSerializer(serializers.Serializer): material = serializers.PrimaryKeyRelatedField(queryset=Material.objects.all(), label="物料ID") batch = serializers.CharField(label='物料批次') pick_count = serializers.IntegerField(label="领料数量") class PickSerializer(serializers.Serializer): subproduction_plan=serializers.PrimaryKeyRelatedField(queryset=SubProductionPlan.objects.all(), label="子计划ID") warehouse = serializers.PrimaryKeyRelatedField(queryset=WareHouse.objects.all(), label="仓库ID") picks = PickDetailSerializer(many=True) def create(self, validated_data): picks = validated_data.pop('picks') for i in picks: try: instance = MaterialBatch.objects.get(material=i['material'], batch=i['batch']) if instance.count < i['pick_count']: raise serializers.ValidationError('物料不足') except: raise serializers.ValidationError('物料不存在') operator = self.context['request'].user validated_data['create_by'] = operator validated_data['operator'] = operator validated_data['type'] = 1 validated_data['inout_date'] = timezone.now() fifo = FIFO.objects.create(validated_data) for i in picks: i['fifo'] = fifo FIFODetail.objects.create(**i) return fifo