119 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			119 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Python
		
	
	
	
| 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('没有入库内容')
 | |
|         
 | |
|         for i in details:
 | |
|             # 校验批次
 | |
|             try:
 | |
|                 if i['batch']:
 | |
|                     obj = MaterialBatch.objects.get(batch=i['batch'], material=i['material'])
 | |
|                     if obj.warehouse != validated_data['warehouse']:
 | |
|                         raise serializers.ValidationError('批次号{}在其他仓库已存在'.format(i['batch']))
 | |
|             except:
 | |
|                 pass
 | |
|         
 | |
|         # 创建采购入库
 | |
|         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
 | |
| 
 |