from rest_framework import serializers from apps.inm.models import FIFO, FIFODetail, IProduct, MaterialBatch, WareHouse,Inventory from apps.system.serializers import UserSimpleSerializer from apps.mtm.serializers import MaterialSimpleSerializer class WareHouseSerializer(serializers. ModelSerializer): create_by_=UserSimpleSerializer('create_by', read_only=True) class Meta: model = WareHouse fields = '__all__' class WareHouseCreateUpdateSerializer(serializers.ModelSerializer): class Meta: model = WareHouse fields = ['name', 'number', 'place'] class WareHouseSimpleSerializer(serializers.ModelSerializer): class Meta: model = WareHouse fields = ['name', 'number', 'place'] class InventorySerializer(serializers. ModelSerializer): material_= MaterialSimpleSerializer(source='material', read_only=True) warehouse_ = WareHouseSimpleSerializer(source='warehouse', read_only=True) class Meta: model = Inventory fields = '__all__' class MaterialBatchSerializer(serializers. ModelSerializer): material_= MaterialSimpleSerializer(source='material', read_only=True) warehouse_ = WareHouseSimpleSerializer(source='warehouse', read_only=True) class Meta: model = MaterialBatch fields = '__all__' class FIFOListSerializer(serializers.ModelSerializer): warehouse_ = WareHouseSimpleSerializer(source='warehouse', read_only=True) operator_ = UserSimpleSerializer(source='operator', read_only=True) class Meta: model=FIFO fields = '__all__' class FIFODetailSerializer(serializers.ModelSerializer): material_= MaterialSimpleSerializer(source='material', read_only=True) class Meta: model=FIFODetail fields = '__all__' class IProductInPurSerializer(serializers.ModelSerializer): class Meta: model = IProduct fields = ['number'] class FIFODetailInPurSerializer(serializers.ModelSerializer): details = IProductInPurSerializer(many=True, required=False) class Meta: model = FIFODetail fields = ['material', 'count', 'batch', 'details'] class MaterialBatchQuerySerializer(serializers.Serializer): warehouse = serializers.IntegerField(label="仓库ID", required=False) materials = serializers.ListField(child=serializers.IntegerField(label="物料ID"), required=False) class FIFOInPurSerializer(serializers.ModelSerializer): """ 采购入库序列化 """ details = FIFODetailInPurSerializer(many=True) class Meta: model = FIFO fields = ['warehouse', 'operator', 'details', 'inout_date'] def create(self, validated_data): details = validated_data.pop('details') if len(details)>0: pass else: raise serializers.ValidationError('没有入库内容') validated_data['type'] = 3 obj = FIFO(**validated_data) obj.save() for i in details: if 'details' in i: p_details = i.pop('details') if len(p_details) != i['count']: raise serializers.ValidationError('数目对不上') else: i['fifo'] = obj fifod = FIFODetail.objects.create(**i) p_list = [] for x in p_details: x['state'] = 1 x['material'] = i['material'] x['warehouse'] = validated_data['warehouse'] x['batch'] = i['batch'] x['fifos'] = [fifod.id] p_list.append(IProduct(**x)) IProduct.objects.bulk_create(p_list) else: i['fifo'] = obj FIFODetail.objects.create(**i) return obj