118 lines
4.1 KiB
Python
118 lines
4.1 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:
|
|
obj = MaterialBatch.objects.get(batch=i['batch'])
|
|
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
|
|
|