149 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			149 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			Python
		
	
	
	
| from rest_framework import serializers
 | |
| 
 | |
| from apps.inm.models import FIFO, FIFOItem, FIFOItemProduct, IProduct, MaterialBatch, WareHouse,Inventory
 | |
| from apps.qm.models import TestRecord, TestRecordItem
 | |
| 
 | |
| from apps.system.serializers import UserSimpleSerializer
 | |
| from apps.mtm.serializers import MaterialSimpleSerializer
 | |
| from django.db import transaction
 | |
| 
 | |
| 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 IProductListSerializer(serializers.ModelSerializer):
 | |
|     material_= MaterialSimpleSerializer(source='material', read_only=True)
 | |
|     warehouse_ = WareHouseSimpleSerializer(source='warehouse', read_only=True)
 | |
|     class Meta:
 | |
|         model = IProduct
 | |
|         fields = '__all__'
 | |
|     
 | |
| 
 | |
| class FIFOListSerializer(serializers.ModelSerializer):
 | |
|     auditor_ = UserSimpleSerializer(source='auditor', read_only=True)
 | |
|     create_by_ = UserSimpleSerializer(source='create_by', read_only=True)
 | |
|     class Meta:
 | |
|         model=FIFO
 | |
|         fields = '__all__'
 | |
| 
 | |
| class FIFOItemSerializer(serializers.ModelSerializer):
 | |
|     warehouse_ = WareHouseSimpleSerializer(source='warehouse', read_only=True)
 | |
|     material_= MaterialSimpleSerializer(source='material', read_only=True)
 | |
|     class Meta:
 | |
|         model= FIFOItem
 | |
|         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 = FIFOItem
 | |
|         fields = ['material', 'count', 'batch', 'details', 'warehouse']
 | |
| 
 | |
| 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 = ['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
 | |
|         
 | |
|         # 创建采购入库
 | |
|         with transaction.atomic():
 | |
|             validated_data['type'] = FIFO.FIFO_TYPE_PUR_IN
 | |
|             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
 | |
|                         fifoitem = FIFOItem.objects.create(**i)
 | |
|                         p_list0 = []
 | |
|                         for x in p_details:
 | |
|                             x['material'] = i['material']
 | |
|                             x['fifoitem'] = fifoitem
 | |
|                             p_list0.append(FIFOItemProduct(**x))
 | |
|                         FIFOItemProduct.objects.bulk_create(p_list0)
 | |
| 
 | |
|                         p_list = []
 | |
|                         for x in p_details:
 | |
|                             x['material'] = i['material']
 | |
|                             x['warehouse'] = validated_data['warehouse']
 | |
|                             x['batch'] = i['batch']
 | |
|                             p_list.append(IProduct(**x))
 | |
|                         IProduct.objects.bulk_create(p_list)
 | |
|                 else:
 | |
|                     i['fifo'] = obj
 | |
|                     FIFOItem.objects.create(**i)
 | |
|         return obj
 | |
| 
 | |
| 
 | |
| 
 | |
| class InmTestRecordItemCreateSerializer(serializers.ModelSerializer):
 | |
|     class Meta:
 | |
|         model = TestRecordItem
 | |
|         fields = ['form_field', 'field_value', 'is_testok']
 | |
| 
 | |
| class InmTestRecordCreateSerializer(serializers.ModelSerializer):
 | |
|     record_data = InmTestRecordItemCreateSerializer(many=True)
 | |
|     fifo_item = serializers.PrimaryKeyRelatedField(queryset=FIFOItem.objects.all(), required=True)
 | |
|     is_testok = serializers.BooleanField()
 | |
|     class Meta:
 | |
|         model = TestRecord
 | |
|         fields = ['form', 'record_data', 'is_testok', 'fifo_item'] |